Java 如何在cq5中从服务器端获取页面每个组件的加载时间

Java 如何在cq5中从服务器端获取页面每个组件的加载时间,java,aem,Java,Aem,如何从服务器端获取CQ5中页面的每个组件的加载时间 根据我的实现,从request.log文件加载页面所需的时间最长。但我需要从服务器端获取页面的每个组件加载时间 我找到了此链接,但这将在客户端起作用: 您必须为每个组件标记类调用包含记录器,并为调用的进入和退出提供秒表 Logger LOG = LoggerFactory.getLogger(classname.class); StopWatch stopWatch = new StopWatch("new"); stopWatch.start

如何从服务器端获取CQ5中页面的每个组件的加载时间

根据我的实现,从request.log文件加载页面所需的时间最长。但我需要从服务器端获取页面的每个组件加载时间

我找到了此链接,但这将在客户端起作用:

您必须为每个组件标记类调用包含记录器,并为调用的进入和退出提供秒表

Logger LOG = LoggerFactory.getLogger(classname.class);
StopWatch stopWatch = new StopWatch("new");
stopWatch.start();
stopWatch.stop();
一旦将其包含在标记类中,就可以找到特定页面中每个组件所用的时间。
您可以使用putty访问服务器日志。

从AEM 6.0版开始,有OOTB功能可以测量页面上每个组件的呈现时间

它可以通过TouchUI(开发人员模式)访问


但是,如果AEM以运行模式“nosamplecontent”安装,它将不起作用。

您可以使用
RequestProgressTracker
,如中所述

可从以下地址获得。为了获得组件的计时统计信息,您可以在每个请求上使用来执行代码

每当调用过滤器时:

  • 从请求对象获取
    RequestProgressTracker
  • 调用
    getMessages
    获取当前请求的请求进度消息集合的迭代器
  • 分析消息以查找资源类型和定时信息。不幸的是,每条消息只能作为
    字符串使用,因此您需要对其进行解析以获取数据
  • 让我们看一下文档中的一些示例消息:

    最后一条信息是我们想要的:

    TIMER_END{103,/libs/sling/servlet/default/explorer/node.esp#0}
    
    数字
    103
    是脚本执行所用的毫秒数。逗号后的值就是脚本。您可以定制一个正则表达式,以便从每个这样的消息中提取这两个值

    我最近参与的一个项目使用这种方法来报告组件性能。我们在NewRelic中有一个整洁的仪表板,在我们构建的每个组件上都有实时统计数据