2013-05-01 46 views
0

我在MasterPage的構造函數&中創建一個秒錶啓動它。我在PreRender中更新一個標籤以顯示服務器端渲染時間。 (我在客戶端設置了javascript定時器,是的,客戶端渲染與服務器端渲染相比是巨大的 - 但是我可以做更多關於服務器端時間的事情,應該是高的)哪對事件給我估計服務器渲染時間?

I在MasterPage中有定時器,以便在寫入毫秒數時可以訪問標籤。

的時間是一致的比我設置頁面構造定時器,然後寫入對頁卸載事件控制檯的時間方式低。

那麼解釋這一切是什麼?我是否需要將定時器的開始/停止移至不同的事件?從頁面構建到頁面卸載的時間是否包含在服務器上呈現該頁面所需的時間內不應計入的時間?

+0

的[可能重複是否有獲得在ASP.Net?](http://stackoverflow.com/questions/2962554/is-there-an-easy-way-of-總頁面響應時間的簡單方法獲得總頁面響應時間在asp網) – 2013-05-02 16:25:33

回答

1

當你開始在主/頁構造秒錶和完成它卸載,這意味着你測量頁面生命週期的時間,我很難同意這是渲染(但是請注意,它包括渲染),因爲網頁中生命週期,你可以調用數據庫/服務/其他東西高達Thread.Sleep()

如果當控件將數據寫入Response.OutputStream我們會考慮「頁面渲染」的時間,那麼我們應該採取其他的辦法。在調用第一個Render方法後,ASP.NET Page Life Cycle Overview頁面呈現開始,在邏輯上它將在最後一個Render方法被調用時結束。

在渲染之前,視圖狀態被保存爲頁面和所有控件。 在呈現階段,該頁面調用每個 控制在Render方法,提供其輸出寫入頁的Response屬性的 OutputStream對象文本編寫。

在我看來,要測量頁面生命週期的渲染部分,最好是啓動並完成秒錶內重寫頁面的渲染方法。

protected override void Render(HtmlTextWriter writer) 
{ 
    var stopwatch = Stopwatch.StartNew(); 
    base.Render(writer); 
    stopwatch.Stop(); 
    // Set the value of rendering time in Page.Master 
} 

再次,爲什麼Render?從ASP.NET頁面生命週期概述:

渲染:這不是一個事件;相反,在這個處理階段,Page對象在每個控件上調用此方法。所有ASP.NET Web 服務器控件都有一個Render方法,用於將控件的 標記發送給瀏覽器。


但不管怎麼說,我不知道爲什麼你想手動測量此。如果跟蹤爲enabled,則可以通過trace.axd或直接在頁面上評估頁面事件持續時間,如果在配置中啓用pageOutput

+0

我認爲你正在閱讀我的問題太字面意思。我通過時間頁面來客觀地瞭解頁面「顯示」的時間,當我點擊一個鏈接並結束頁面的交互時,這個頁面會顯示多長時間 - 其中一些是服務器時間,其中一些是客戶端時間(瀏覽器處理),我對「Render」事件花了多長時間並不特別感興趣。所以我試圖選擇一對事件來衡量服務器「創建」頁面所需的時間。 – MatthewMartin 2013-05-02 12:01:54

+1

@MthethewMartin是的,我從字面上看問題。爲了測量整個頁面的生命週期,我建議攔截'Global.asax'中的'BeginRequest'和'EndRequest'事件,並在那裏寫入響應時間。我發現之前曾問過這樣的問題,請看http://stackoverflow.com/questions/2962554/is-there-an-easy-way-of-obtaining-the-total-page-response-time-in -Asp-淨?LQ = 1。 – 2013-05-02 13:43:26