在ASP.NET页面中计算加载时间

4
我想计算加载ASP.NET页面所需的时间。当用户输入URL并按下回车键时,会发生以下事件:
  1. 向服务器发送请求
  2. 服务器处理请求,执行任何on load服务器端逻辑,进行数据库调用
  3. 浏览器接收响应,下载HTML和JS文件
  4. 浏览器运行客户端逻辑(Javascript函数on load)
  5. 浏览器呈现页面
如果我想测量每个操作所需的时间,我的理解是可以使用以下工具:
  1. 对于(1),使用Fiddler计算网络上的时间
  2. 对于(2),打开跟踪以计算服务器端处理时间
  3. 对于(3),使用Fiddler计算下载时间
  4. 对于(4),使用Firebug计算JS函数所需的时间
将1到4相加即可得出总时间。
我的想法正确吗?是否有一个工具可以完成所有这些操作?是否有更简单的方法?
5个回答

4
Firebug在“Net”标签页中实际上也会给出1和3,并提供漂亮的小图形条,显示响应时间的组成部分(DNS查找,查询服务器,等待第一个字节,下载时间)。
由于服务器代码运行在服务器上,客户端代码运行在客户端上,所以没有一种工具可以同时进行客户端和服务器测量。您可以通过从总时间中减去所有其他时间来近似计算,但最精确的服务器结果确实来自服务器本身。

尽管服务器端代码正在服务器上运行,但由于客户端仍在等待此过程发生,为什么我们不能在客户端捕获这个过程呢? - Nick
客户端确实会捕获它,作为响应时间的一个组成部分。然而,这也考虑了流量必须经过的每个网络跳跃以及读取时间(TTFB、TTLB),因此它不会像服务器的计算那样准确,服务器可以在请求接收后立即启动计时器,并在编写输出之前停止计时器。 - womp
那么,可以说响应时间包括步骤1、2、3吗? - Nick
有点儿。响应时间包括总响应时间。其中1%可能是网络延迟,其余99%是服务器处理时间,或者反过来。你的第二个问题可以通过对服务器进行跟踪来最准确地得出答案。如果你只关心总响应时间,那么它会涵盖它。如果你关心代码执行时间,那么它就不能准确地涵盖它。 - womp
太好了。那么,我想我可以获取响应时间,加上JS执行时间,然后就差不多了。看起来IE8分析器没有网络选项卡。在使用IE时有什么方法可以获取响应时间吗? - Nick
另外,我猜我做错了什么。网络选项卡显示总共7秒。但是它似乎只需要加载大约3秒钟(由计算机时钟测量)。 - Nick

2

对于第二点,

global.asax

Private sw As Stopwatch = Nothing
Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest
    sw = Stopwatch.StartNew
End Sub

Private Sub Global_asax_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.EndRequest
    If sw IsNot Nothing Then
        sw.Stop()
        Response.Write("<b>took " & sw.Elapsed.TotalSeconds.ToString("0.#######") & " seconds to generate this page</b>")
    End If
End Sub

@mrHinsh,那就是他所问的。 - Fredou

1

有一个适用于FireFox的插件可以支持此需求:

Google Page Speed - 这个工具将允许你实时记录网络活动,然后查看每个请求部分。它们所花费的时间和并行运行的组件。

此外,如果你正在寻找优化页面,YSlow 可以提供其他建议,但它不能为你提供所需的具体数据。


Google Page Speed 也需要 FireBug。 - Nirlep
YSlow是否涵盖步骤1、2、3、4? - Nick
我的错,YSlow只是一个有用的优化工具,它并不能显示往返请求的真实时间。Google页面速度可以显示这一点,并且对于找出真正的瓶颈非常有帮助。 - Michael La Voie

0

Visual Round Trip Analyzer 是一个很好的程序,它使用 NetMon 来计算您的步骤 #1、2 和 3。它可以告诉您网络需要多长时间以及服务器的处理时间。

步骤 #4 是最难的,因为不同的浏览器会在不同的时间开始显示内容。


0
你为什么不直接使用 .NET 中的浏览器控件并创建自己的应用程序来测试从初始请求到最终响应所需的时间呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接