当前位置: 首页 > 知识库问答 >
问题:

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

罗寒
2023-03-14

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

根据我的实现,我们从请求中加载页面的时间最长。日志文件。但我需要从服务器端获取页面的每个组件加载时间。

我找到了这个链接,但这将从客户端工作:http://www.wemblog.com/2014/05/how-to-find-component-load-time-on-page.html

共有3个答案

司寇光华
2023-03-14

如Sling留档中所述,您可以使用Request estProgressTracker

可从SlingHttpServletRequest#getRequestProgressTracker获取。为了获得组件的计时统计数据,可以使用Servlet过滤器在每个请求上执行代码。

无论何时调用过滤器:

  1. 从请求对象获取RequestProgressTracker
  2. 调用getMessages获取当前请求的请求进度消息集合的迭代器
  3. 分析消息以查找资源类型和时间信息。不幸的是,每条消息都只能作为字符串使用,因此需要对其进行解析以获取数据

让我们看一下文档中的一些示例消息:

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

TIMER_END{103,/libs/sling/servlet/default/explorer/node.esp#0}

数字103是脚本执行所需的毫秒数。逗号后的值就是脚本。您可以定制一个正则表达式,从每个这样的消息中提取这两个值。

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

公孙英飙
2023-03-14

从AEM 6.0版本开始,有一个OOTB特性来测量页面上每个组件的呈现时间。

它可以通过开发者模式TouchUI访问。

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

艾骏
2023-03-14

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

Logger LOG = LoggerFactory.getLogger(classname.class);
StopWatch stopWatch = new StopWatch("new");
stopWatch.start();
stopWatch.stop();

一旦您将其包含在标记类中,您就可以找到特定页面中每个组件所花费的时间。您可以使用puty访问您的服务器日志。

 类似资料:
  • 让我给你一个关于系统如何工作的想法。 我使用JAAS登录模块进行登录和角色管理。我可以根据我的角色访问特定页面。 我在地址栏中输入我的url,点击回车键。 登录页面出现,正确登录后,它会将我重定向到正确的页面(现在我们称之为page1.jsf)。 我想在页面加载时调用服务器端方法。 你能帮我吗? **编辑** 假设我必须访问第1页。jsf,仅角色1可访问。 在地址栏中,我输入http://loca

  • 我是一个电子新手,我想在窗口加载时从服务器获取一些数据,这样我就可以把这些数据显示给用户。我尝试在窗口加载时使用,但它不起作用!表示在加载窗口时未触发。请告诉我当窗口加载时如何从服务器获取数据? index.html

  • 问题内容: 您经常会看到Node的示例hello world代码,该代码创建Http Server,开始侦听端口,然后执行以下操作: 但理想情况下,您希望这样做: 如何在调用前不将服务器号存储在变量中的情况下检索服务器当前正在侦听的端口? 我之前已经看过这件事,但是在Node文档中找不到。也许这是表达的特定内容? 问题答案: Express 4.x答案: Express 4.x(根据下面的Tien

  • TDR:我需要在自己的后端拥有Google Cloud Functions。 我编写应用程序,它使用firebase(尤其是firestore)作为在nodejs上编写的我自己的后端和客户端应用程序之间的传输层。 有时,我需要从后端的客户端捕获一些事件,但我希望避免直接向后端执行http查询(因为我需要捕获脱机状态和其他问题)。最好在firestore文档中进行一些更改,在后端捕获这些更改并执行一

  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此它不需要调用任何东西,只需在页面加载时继续使用servlet。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用先前声明的会话变量将所有信息(如登录名、密码等)打印到表中。

  • 问题内容: 使用以下选项启动Java应用程序时: Java使用临时端口,这对于避免冲突非常有用。 是否可以从应用程序内部以编程方式获取实际端口(或连接URL)? 问题答案: 这将打印如下网址