2009-11-09 29 views
0

我正在寫一個網站(C#,ASP 3.5),同時實施一個簡單的CMS。 在幾個有限的地方 - 我允許網站管理員管理頁面內容。ASPX CMS - 性能問題

編輯內容由Edit控件完成 - 輸出HTML存儲在數據庫(SqlServer Express)中。

每次頁面加載 - 我從數據庫中讀取頁面HTML內容並將其打印在屏幕上。

至於現在(發展階段)一切正常,順利。

但是,我有點怕現實世界中的性能問題(太多的db調用?)。

我正在尋找最佳的解決方案用於高速緩存動態HTML網頁: 假設頁面內容將不會被頻繁地更新,我應該:

  • 保持溶液今天做 - 呼籲分貝每頁加載的動態頁面內容(如果!IsPostBack)
  • 將頁面內容存儲在文件上並從磁盤讀取
  • 將頁面內容存儲在應用程序變量上。
  • 其他想法?

我假設頁面內容,即HTML文本 - 不是太長。

感謝

回答

0

我不想發表了否定的答覆或不提供答案,但做任何事情或考慮緩存你應該決定/摸出如果這是一個性能問題之前。如果你從誰已經大舉介入的表現人們讀什麼(波多黎各馬里亞尼和他的博客是一個很好的例子),那麼你將看到的,這是通過測量實現的途徑之一。

有多少點擊率,你會每小時或每分鐘可期待?數據庫調用在生產服務器上執行多長時間?

有許多的發現這一點的方式,一個簡單的代碼分析器(.NET自定義類 - 留言,如果你想細節我)可以用來時間每個請求和輸出這一個日誌文件。進行數據庫調用所花的時間也可以被註銷。這可以給你的表演的想法對單個請求(假設分期硬件/環境非常相似的生產環境)。要在負載下測試它,您可以使用壓力測試工具並模擬預期負載。這應該告訴你每秒的平均請求服務時間。如果這是可以接受的,你可能根本不需要任何緩存。很多時間緩存可以在必要之前採用。添加代碼以使用企業庫緩存功能將不必要地增加代碼的複雜性。輸出緩存也可能引入微妙的問題,但在這種情況下,我會同意這個答案,認爲這是一個可行的解決方案。

從你描述它聽起來並不像你將作出太多的數據庫訪問,您將得到每請求一些網站做命中的數量感到驚訝。至於你的第二點,我絕對不會考慮重新設計性能的應用程序,直到進行測量。我假設您將內容存儲在數據庫中的原因很多,將其移動到磁盤上會帶來其他開銷和安全隱患。

+0

在這種情況下,什麼時候就只有一個或兩個數據庫調用來檢索每頁CMS文本,我不同意,實現緩存機制沒有必要。 – Ranch 2010-02-18 09:24:28

0

我將實現緩存策略,一個不涉及磁盤I/O。 舉例來說,你可以下載Enterprise Library和做類似:

ICacheManager cacheManager = CacheFactory.GetCacheManager(); 
object obj = cacheManager.GetData(YOUROWNCACHEKEY);

YourCMSContentType cmsContent = null;
if (obj == null) { cmsContent = ""; //get cms content from db here cacheManager.Add(YOUROWNCACHEKEY, cmsContent); } else { cmsContent = obj as YourCMSContentType; }
return cmsContent;

您需要參考:

  • Microsoft.Practices.EnterpriseLibrary.Caching

這些都需要也可在服務器上獲得:

  • Microsoft.Practices.EnterpriseLibrary.Common.dll
  • Microsoft.Practices.ObjectBuilder2.dll
  • Microsoft.Practices.Unity.dll

編輯您的app.config或web.config文件,點擊右鍵,單擊編輯企業庫配置,右鍵單擊.config節點,添加緩存應用程序塊。

問候,

M.