我如何衡量客户需要等待请求的时间。

在服务器端,这很容易,例如通过过滤器。但如果我们想考虑包​​括延迟和数据传输在内的总时间,那就很困难了。

是否可以访问底层套接字以查看请求何时完成?或者是否有必要做一些javascript技巧?也许通过浏览器和服务器之间的时钟同步?是否有任何预制的 JavaScript 可以完成此任务?

有帮助吗?

解决方案

您无法纯粹从服务器端知道客户端必须等待多长时间。您将需要一些 JavaScript。

您不想同步客户端和服务器时钟,这太过分了。只需测量客户端发出请求和完成显示响应之间的时间。

如果客户端是 AJAX,这可能非常简单:调用 new Date().getTime() 获取发出请求时的时间(以毫秒为单位),并将其与解析结果后的时间进行比较。然后将此计时信息发送到后台的服务器。

对于非 AJAX 应用程序,当用户单击请求时,使用 JavaScript 将当前时间戳(从客户端的角度)与查询一起发送到服务器,并在请求时将相同的时间戳传递回客户端。重新加载结果页面。在该页面的 onLoad 处理程序中,测量总运行时间,然后将其发送回服务器 - 使用 XmlHttpRequest 或在向服务器发出的下一个请求中添加额外的参数。

其他提示

如果您想从浏览器中测量它以模拟任何客户端请求,您可以查看 Firebug 中的网络选项卡,以了解下载页面的每个部分需要多长时间以及下载顺序。

您可以包装 HttpServletResponse 对象和 HttpServletResponse 返回的 OutputStream。当输出开始写入时,您可以设置一个开始日期,当它停止时(或当它被刷新等)时,您可以设置一个停止日期。

这可用于计算将所有数据流式传输回客户端所花费的时间长度。

我们在我们的应用程序中使用它,并且数字看起来很合理。

编辑:您可以在 ServletFilter 中设置开始日期来获取客户端等待的时间长度。我给了您将输出写入客户端所需的时间长度。

您可以设置一个 0 字节套接字发送缓冲区(我并不完全推荐这样做),这样当您阻塞调用 HttpResponse.send() 时,您可以更清楚地了解最后一个字节何时剩余,但不包括行程时间。 埃克——提起这件事我就感到恶心。您可以在 Tomcat 中使用连接器特定设置来执行此操作。(Tomcat 6 连接器文档)

或者您可以想出某种 javascript 时间戳方法,但我不希望设置客户端时钟。必须对网络服务器进行多次调用。

  • 时间戳查询
  • 真实的请求
  • 报告数据

尽管仍然存在一些抖动差异,但这种方法可以覆盖延迟。

嗯...你遇到的问题很有趣。:)

查看 捷飞网, ,由 netflix 开发,让他们能够更准确地查看总页面 -> 页面渲染时间

我有同样的问题。但是这个 JavaOne论文 确实帮助我解决了这个问题。我会要求你仔细看看它,它基本上使用 javascript 来计算时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top