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