如何编程实现测量请求网页时 server 端处理的时间和 client 端渲染的时间

2016-10-25 14:17:58 +08:00
 zeal7s

需求同标题,项目中后端用的是 SpringMVC 。

关于 server 端处理的时间,初步想法是通过 Interceptor 来实现,即 preHandle 中记录开始时间, afterCompletion 中记录结束时间。虽然这样还不够精确,但应该能在一定程度上反映 server 端的性能。

关于 client 端就不太清楚了。。。因为对 JavaScript 还不太熟悉,各位工作中有遇到类似的问题么? Thanks !

2541 次点击
所在节点    Java
10 条回复
xuzywozz
2016-10-25 14:58:24 +08:00
遇到了同样的问题...同求解答
hailinzeng
2016-10-25 15:16:56 +08:00
client 端的你可以看一下 58.com

Request URL:http://tracklog.58.com/referrer4.js?_=1477379501050
Request Method:GET
Status Code:200 OK
Remote Address:115.159.231.159:80

Cookie:id58=c5/ns1fjVM0Al14rAxHAAg==; als=0; bj58_id58s="TU43d3BhWDIrVk5rOTgzMw=="; bj58_new_uv=4; final_history=27415536300987%2C27636705321915%2C27273583419084%2C27359797444139%2C27427040382126; Hm_lvt_3bb04d7a4ca3846dcc66a99c3e861511=1474562018,1476890735; Hm_lvt_e15962162366a86a6229038443847be7=1474561996,1476890649; hots=%5B%7B%22d%22%3A0%2C%22s1%22%3A%22%E4%BF%9D%E9%95%96%22%2C%22s2%22%3A%22%E6%AD%A6%E6%A0%A1%22%2C%22n%22%3A%22sou%22%7D%5D; __utma=253535702.1323617980.1474561988.1474596957.1476890545.3; __utmz=253535702.1476890545.3.3.utmcsr=bj.58.com|utmccn=(referral)|utmcmd=referral|utmcct=/; city=bj; 58home=bj; 58tj_uuid=e0bdb92f-aeb8-44d5-9e5b-23c7872aac2a; new_session=1; new_uv=5; utm_source=; spm=; init_refer=; ipcity=bj%7C%u5317%u4EAC%7C0; myfeet_tooltip=end
misaka19000
2016-10-25 15:19:10 +08:00
你是想要监控用户端的页面渲染的时间?
SakuraKuma
2016-10-25 17:17:02 +08:00
q397064399
2016-10-25 19:14:14 +08:00
http://jonwinters.pw

看我的小论坛,刚好有这个后端页面渲染计时的功能

我是用监听器实现的, J2EE 规范里面有 request listener 每个请求都会调用这个 listener

最后你在 JSP view 里面 加入当前时间 减去 request 请求的时间就好了
q397064399
2016-10-25 19:16:12 +08:00
拦截器我自己测试过了,有问题,写了个 URL 规则 次级目录的 URI 没法拦截,后来我改成 Listener 了 这个是我在
jsp servlet 里面看到的一个 J2EE 规范接口
q397064399
2016-10-25 19:17:34 +08:00
public class RequestListener implements ServletRequestListener {//记录每个页面请求的 Server 的时间
private Logger logger = LoggerFactory.getLogger(this.getClass());
public void requestDestroyed(ServletRequestEvent sre) {
ServletRequest servletRequest = sre.getServletRequest();
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
logger.info( httpServletRequest.getRequestURI());
logger.info("Cost Time:"+(System.currentTimeMillis() - (Long)( httpServletRequest.getAttribute("startTime"))));
}

public void requestInitialized(ServletRequestEvent sre) {
long startTime = (new Date()).getTime();
sre.getServletRequest().setAttribute("startTime",startTime);
//logger.info("requestStartTime:"+startTime);

}
}
byenow
2016-10-25 19:59:05 +08:00
4 楼正解
zeal7s
2016-10-25 23:40:42 +08:00
@SakuraKuma 学习了,多谢!
zeal7s
2016-10-25 23:41:04 +08:00
@q397064399 感谢给出的例子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX