如何衡量客户端等待请求的时间。
在服务器端,通过过滤器很容易。 但是,如果我们想要考虑包括延迟和数据传输在内的总时间,那就太难了。
是否可以访问底层套接字以查看请求何时完成? 或者是否需要做一些javascript技巧?也许通过浏览器和服务器之间的时钟同步这项任务有没有预制的javascripts?
答案 0 :(得分:3)
如果您想从浏览器测量它以模拟任何客户端请求,您可以在firebug中观看网页标签,看看每个页面下载需要多长时间以及下载顺序。
答案 1 :(得分:3)
您可以包装HttpServletResponse对象和HttpServletResponse返回的OutputStream。当输出开始写入时,您可以设置startDate,当它停止时(或者当它被刷新等)时,您可以设置一个stopDate。
这可用于计算将所有数据流回客户端所花费的时间长度。
我们在申请中使用它,数字看起来很合理。
编辑:您可以在ServletFilter中设置开始日期以获取客户端等待的时间长度。我告诉你将输出写入客户端所花费的时间。
答案 2 :(得分:2)
您无法知道客户端必须等待多长时间才能从服务器端等待。你需要一些JavaScript。
您不希望同步客户端和服务器时钟,这太过分了。只需测量客户端发出请求的时间和完成显示响应的时间。
如果客户端是AJAX,这可能非常简单:调用new Date()。getTime()以获取请求时的毫秒数,并将其与解析结果后的时间进行比较。然后在后台将此时间信息发送到服务器。
对于非AJAX应用程序,当用户单击请求时,使用JavaScript将当前时间戳(从客户端的角度)发送到服务器以及查询,并将相同的时间戳传递回重新加载结果页面时的客户端。在该页面的onLoad处理程序中,测量总耗用时间,然后将其发送回服务器 - 使用XmlHttpRequest或者为服务器发出的下一个请求添加额外参数。
答案 3 :(得分:0)
你可以设置一个0字节的套接字发送缓冲区(我不建议这样做),这样当你对HttpResponse.send()进行阻塞调用时,你对离开最后一个字节的时间有了更深入的了解,但是旅行时间不包括在内。 Ekk - 即使提起它我也感到不安。您可以在Tomcat中使用连接器特定设置执行此操作。 (Tomcat 6 Connector documentation)
或者您可以想出某种javascript时间戳方法,但我不希望设置客户端时钟。必须多次调用Web服务器。
这种方法可以涵盖延迟,尽管你仍然有一些抖动差异。
嗯......你有一个有趣的问题。 :)答案 4 :(得分:0)
查看由netflix开发的Jiffy-web,以便更准确地查看总页数 - >页面渲染时间
答案 5 :(得分:0)
我遇到了同样的问题。但这JavaOne Paper确实帮助我解决了这个问题。我会要求你通过它,它基本上使用javascript来计算时间。