V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zeal7s
V2EX  ›  Java

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

  •  
  •   zeal7s · 2016-10-25 14:17:58 +08:00 · 2758 次点击
    这是一个创建于 2986 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    10 条回复    2016-10-25 23:41:04 +08:00
    xuzywozz
        1
    xuzywozz  
       2016-10-25 14:58:24 +08:00
    遇到了同样的问题...同求解答
    hailinzeng
        2
    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
        3
    misaka19000  
       2016-10-25 15:19:10 +08:00
    你是想要监控用户端的页面渲染的时间?
    SakuraKuma
        4
    SakuraKuma  
       2016-10-25 17:17:02 +08:00   ❤️ 1
    q397064399
        5
    q397064399  
       2016-10-25 19:14:14 +08:00
    http://jonwinters.pw

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

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

    最后你在 JSP view 里面 加入当前时间 减去 request 请求的时间就好了
    q397064399
        6
    q397064399  
       2016-10-25 19:16:12 +08:00
    拦截器我自己测试过了,有问题,写了个 URL 规则 次级目录的 URI 没法拦截,后来我改成 Listener 了 这个是我在
    jsp servlet 里面看到的一个 J2EE 规范接口
    q397064399
        7
    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
        8
    byenow  
       2016-10-25 19:59:05 +08:00
    4 楼正解
    zeal7s
        9
    zeal7s  
    OP
       2016-10-25 23:40:42 +08:00
    @SakuraKuma 学习了,多谢!
    zeal7s
        10
    zeal7s  
    OP
       2016-10-25 23:41:04 +08:00
    @q397064399 感谢给出的例子
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   984 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:05 · PVG 07:05 · LAX 15:05 · JFK 18:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.