我正在開發一個基於web的系統,用戶將點擊很多頁面。因爲他們經常會回到特定的頁面(例如,書籍的概述),所以我想實施一些緩存機制來加快速度。這個頁面緩存系統是否合理?
在顯示用戶的內容之前,我會將內容的MD5校驗和與用戶的ID和頁面的URL一起存儲在數據庫中。
當他下次登錄時,我會檢查是否存在帶有URL和用戶標識的條目。如果有的話,我將存儲的MD5與我將要計算的MD5進行比較,如果MD5相同,則發送「未更改」標題,以便瀏覽器不必下載整個頁面。
我正在開發一個基於web的系統,用戶將點擊很多頁面。因爲他們經常會回到特定的頁面(例如,書籍的概述),所以我想實施一些緩存機制來加快速度。這個頁面緩存系統是否合理?
在顯示用戶的內容之前,我會將內容的MD5校驗和與用戶的ID和頁面的URL一起存儲在數據庫中。
當他下次登錄時,我會檢查是否存在帶有URL和用戶標識的條目。如果有的話,我將存儲的MD5與我將要計算的MD5進行比較,如果MD5相同,則發送「未更改」標題,以便瀏覽器不必下載整個頁面。
您是否第一次對Web應用程序進行了描述,以確定您的性能瓶頸所在?
小心不必要的優化:如果頁面已經加載得很好,但你試圖擠出幾個百分點的速度,我個人不會打擾任何專門的優化。
使用建議的方法,請記住,除了MD5計算之外,您仍然會製作數據庫命中。首先確保在數據庫中有合適的索引以加快查詢速度 - 這可能就是您需要做的所有事情。
頁面圖像重嗎?圖像是作爲BLOB存儲在數據庫還是文件系統中?如果圖像存儲在數據庫中,請將它們移至文件系統並將文件名存儲在數據庫中。使用專用於靜態內容的Web服務器來提供圖像。靜態內容服務器也可以是您的應用的代理。
如果我們的目標是通過明文內容(即HTML,CSS和JavaScript)來減少帶寬使用,我建議您只需打開gzip壓縮。另外,考慮這種情況下的靜態內容Web服務器。
但是,要回答您提出的問題,提出您的建議解決方案是否合理:我想它可以工作,但是在任何給定網站上它是否有效都有很多因素。所以你可以做的一件事是實現緩存系統,然後針對你的網站運行基準測試(例如,Apache ab),並看看它是否實際上有所作爲。
謝謝。你完全正確的打電話來首先完成應用程序的分析,因爲我會引入一些新的複雜性。我會研究這個(以及明確的gzip壓縮)和某種形式的基準測試。 – PeerBr 2010-09-05 13:23:38
3.5年後(哇),我們剛剛完成了一個重大項目來提高性能。由於我們之前沒有做過代碼分析,我們發現了編碼問題的瓶頸。我們現在的做法是用Ajax替換某些頁面重新加載。你的觀點仍然是絕對有效的,他們發現了完全正確的事情。 – PeerBr 2014-02-01 22:03:19