2014-01-15 124 views
29

我最近創建了一個asp.net mvc web應用程序並在線發佈它。ASP.NET MVC-初始加載速度慢

第一次加載網站時,您會發現它需要大約10-15秒的時間才能真正顯示,但是在點擊一次後,加載速度將與第二次加載一樣快。我只是想知道,如果有人可能有一個想法,爲什麼網站這麼久?

+0

這可能是由於幾個原因。主要是DNS服務器沒有該域的IP地址。此外,這似乎並不是C#/ asp.net問題,現在。 – Abhinav

+0

剛發現另一件事,你的主頁有2個非常大的圖像。您可能想要調整它們的大小。 – Abhinav

+0

你指的是什麼大的圖像?你的意思是在頁面左邊的滑塊中?謝謝 –

回答

18

通常情況下,應用程序在啓動應用程序域時總是需要一些額外的時間來加載。

幫助加劇這種情況的東西可能來自編寫不好的代碼(IE:Application_Start)到您可能正在使用的某些庫(例如ORM)的任何內容。你已經加載了多少個模塊?

對於初學者,請檢查您的web.config中是否存在臭名昭着的<compilation debug="true">。這可能會在生產環境中產生顯着的性能影響。將其設置爲「false」!

推薦使用Google搜索「改善應用程序啓動時間」的內容並尋找可能與您的特定應用程序有關的事情。從你的第一個評論

更新:

如果你所看到的應用30分鐘一貫這可能與您的應用程序池回收設置在後重新啓動(幾秒鐘掛起) IIS。

進入IIS管理器(假定V7 +):

  1. 應用程序池
  2. 右鍵單擊正在使用您的應用程序(S)
  3. 選擇 「循環」
  4. 游泳池,一個窗口將拿出標記爲「回收 條件」
  5. 檢查這些設置,因爲他們將確定何時自動 殺死您的應用程序池並重新啓動它。

在總體性能方面,你可能也想嘗試:

  1. 添加在您的 的Application_Start()方法或任何其他適用的位置吐出經過時間的一些調試語句,試圖 趕上什麼時間最長。
  2. 創建一個完全乾淨的演示項目並進行部署。看看它 遭受同樣的問題。如果它不嘗試引入更多 以及更多真實代碼,直到您檢測到放緩。

如果你真的難倒#2可能是,即使這將是可能是最慢的選擇你最好的選擇。

+0

感謝您的輸入。我現在將編譯調試設置爲false,但似乎沒有解決它。我沒有使用ORM,網站只是簡單地訪問一個XML feed,並顯示它的原始數據。我不認爲我使用了很多(如果有的話)模塊。 看來,當我第一次加載網站時,它需要10+秒,但如果我試圖在幾次後直接加載它,它只需要超過2秒,這是正常的時間。但是,如果我離開它30分鐘並回到它,它再次需要10+秒。不確定會造成這種情況。 –

+0

@JamieMclaughlan從上面的評論中對我的文章做了一些補充。希望能有所幫助。 – Timeout

+1

這聽起來像是默認的應用程序池「空閒超時」設置,20分鐘後會關閉您的應用程序池,並會導致它在第一次加載時(再花費15秒)再次加載。 – VFein

0

除了周杰倫說的話外,你應該考慮你的應用程序池的內存使用情況。共享主機環境尤其如此,一旦內存限制達到(而不是基於時間),您的提供商通常會回收應用程序池。這將再次導致您的站點「重新啓動」,導致初始加載性能問題。

-1

它看起來旋轉的圖像有點大。在我的瀏覽器中,這部分加載最後一個。網頁的其餘部分加載速度非常快。您可能會想到調整這些圖像的大小。此外,大型JavaScript文件可能會在初始加載期間導致一些減速。

+0

嗨,感謝您的意見。你的意思是主頁左側滑塊中的圖像?謝謝 –

+0

是的,圖像滑塊在左邊。我想它會在所有顯示的圖像被加載後出現。解決方法之一是更改Java腳本,使滑塊在加載第一個圖像後出現,並/或減小圖像的大小。 – feradz

14

我也有同樣的問題,第一次加載asp.net mvc網站緩慢,最後我發現加載網站的最佳方式,在第一次加載時極其快速。

我的解決方案是針對Windows Server 2008 R2和IIS 7.5的,但是在上層的Windows服務器和上層的iis版本中也可以工作,但有一些簡單的區別。

首先,您必須將應用程序池的startMode設置爲始終運行,這會阻止您的應用程序池在一段時間後無法啓動。 (在我的情況下,只是這一步改變我的網站第一次加載從45-55秒到約8-12秒)

步驟一個

,也爲你的網站沒有第一個請求, 預加載您的網站,我們需要一個步驟,即通過在兩個步驟從here

安裝應用程序初始化模塊IIS7.5,你必須爲您的網站設置preloadEnabled = true,這個選項是應用程序初始化添加到網站設置的。

欲瞭解更多信息,以及如何設置這些選項,請參閱本博客文章:第二步後 http://blogs.iis.net/wadeh/application-initialization-part-2

,我的網站負載,在短短1-3秒

+1

你能否澄清一下你的意思是「startMode」?我只能在高級設置下看到「自動啓動」,默認設置爲True。 – usefulBee

+1

在windows/system32/inetsrv/config中找到applicationHost.config;找到並找到您的應用程序池並添加以下屬性: startMode =「AlwaysRunning」 例如: mesut

+1

請您考慮添加您的評論作爲我之前發佈的一個問題的答案,並且只是澄清如何從Web.Config文件完成相同的目標,並且我會很樂意接受它作爲答案。 http://stackoverflow.com/questions/35046455/how-to-manipulate-application-pool-configurations-in-an-mvc-application – usefulBee

-2

有實現以下幾個步驟:

  1. 客戶端緩存
  2. 捆綁和微小
  3. 服務器端緩存
  4. 配置自動啓動與IIS管理器