2013-09-23 80 views
1

隨着我們試圖增加構建頻率(並且隨着我們的網站流量的增加),我們注意到,在流量較高時,初始的構建後頁面會將峯值加載到20或30秒。我們的版本是通過將DLL的+ PDB複製到同步到另一個服務器的單個服務器來發布的。該文件複製通常需要幾秒鐘。構建後會導致高延遲頁面加載的原因是什麼?

什麼是這種初始延遲峯值的一些因素?是否有任何通常採取的措施來避免此問題? (我無法想象每天執行多個構建的高流量站點,如果不是多個構建/小時,容忍這種事情)。

回答

2

這種延遲的主要原因是ASP.Net在頁面上進行編譯在第一次加載期間,將aspx標記轉換爲代碼。

通過在構建過程中進行預編譯,您可以解決此問題(並且實際上被列爲此鏈接的第一個優勢)。當然,這樣做的代價是更長的構建時間。更多信息是在這裏:http://msdn.microsoft.com/en-us/library/bb398860(v=vs.100).aspx

如果您使用的MSBuild來處理您的CI構建通過使用的MSBuild的AspNetCompiler任務:http://msdn.microsoft.com/en-us/library/ms164291.aspx

另一個優點這(爲什麼我傾向於即使在開發中使用此構建),如果你將它集成到你的構建過程中,並且最終在頁面上出現語法錯誤,構建將失敗,而不是你的用戶成爲第一個捕獲它的用戶。

在回答您的評論(我的反應是越來越的評論太長):

其實,我根本不知道的批次設置自己到現在爲止。它看起來像設置batch錯誤在開發過程中有意義,以減少那裏的初始加載時間。但是,似乎這樣做會使每個頁面模式下的asp.net函數發生作用,從而導致大型應用程序的速度變慢。因此,可能最好的折衷方案是在開發環境中,將batch設置爲false以加快開發時間,然後使用web.config轉換將其設置爲true以進行生產,並在生產構建期間使用預編譯器。然後,您只需爲兩臺服務器支付一次預編譯成本,並且這種方式對用戶不可見。

+0

哦,有趣......不知道有不同的預編譯「水平」。 .aspx彙編在「批量編譯」設置中提到了什麼? ...通過僞造或減少最大批量大小,可以將性能擊中「展開」嗎? – svidgen

+0

試圖通過這裏的文檔篩選有點混亂。一些文檔建議我放棄那裏的DLL(編譯併發布到VS中的Web應用程序項目的臨時目錄)是我可以從Web應用程序項目預期的預編譯程度。其他文檔表明我可以預編譯aspx自己,並可以選擇「鎖定」它們(強制顯式重新編譯任何標記更改)。要清楚,除了*代碼隱藏(預)編譯之外,您在此處提及的彙編* – svidgen

+0

如果按照我目前的理解,IIS和/或Aspnet_compiler.exe執行第二級編譯,那麼Visual Studio的構建/發佈操作是否沒有優雅自然的內置方法來執行此編譯? – svidgen

相關問題