2011-04-08 98 views
0

我使用Cookie進行頁面緩存,是嗎?使用cookie緩存頁面是否好?

要顯示部分靜態內容(很少從數據庫中更新), 我不喜歡與數據庫交互太多,所以我可以使用cookie將結果存儲在客戶端計算機中並直接顯示數據?

對於數據的真實性和完整性,我創建用於數據的CRC,並與在該cookie數據一起存儲。 crc算法算法是硬編碼(假設),所以

這個想法是否有任何缺點?

+2

也許你應該看看memcached。 – GWW 2011-04-08 03:51:46

+1

不知道這是否是一個好主意,部分原因是您可以存儲每個cookie的存儲限制(4kb)。 – 2011-04-08 03:52:35

+0

也許還應該補充說有可能將頁面保存爲服務器本身的文件,並在需要刷新時管理超時。我認爲這可能是你想要的。 – JRSofty 2011-04-08 03:55:13

回答

3

餅乾不應該被用於緩存,因爲您的Cookie從瀏覽器發送到每個請求的服務器!這意味着你發送更多的字節,這意味着更高的延遲。所以你實際上是通過以這種方式使用cookie來減慢你的系統,而不是幫助它。在網站上緩存數據的正確方法是使用localStorage(或其他HTML5存儲類之一)對其進行緩存。

+0

是否被localstorage廣泛支持? – 2011-04-08 05:50:26

+0

@Prashanth,是的,它得到了廣泛的支持。它甚至適用於IE8和IE9。 – 2011-04-10 03:55:06

3

這聽起來對我來說是個壞主意。緩存的數據是用戶特定的還是全局的?對於全局數據來說,在服務器端緩存整個生成的頁面並對其進行響應,對於未來的請求會更好。使用Cookie,您仍然需要動態生成每個請求的頁面。

對於用戶特定的數據,這取決於在頁面上,但一般要存儲如用戶在會話名稱的事情。緩存類似用戶個人資料頁面的內容不會很有幫助,因爲它不會經常出現。

在這兩種情況下,你將最終浪費了大量的帶寬接收對每個請求所有這些額外的信息,你還有動態生成每個請求的頁面。如果您的校驗和算法受到損害,並且您存儲cookie中重要的任何內容(如帳戶餘額甚至用戶名),也會產生安全隱患。此外,你如何使緩存在cookie中的數據無效?每個請求都需要一個機制來檢查數據是否過時,從而破壞了目的。

1

餅乾應該用來存放小弦像會話ID和用戶名。

你最好把你的服務器上寫的靜態內容到本地文件(或數據庫),直到你決定終止其服務於靜態內容 - 然後重複這個過程。

有服務器,如分佈式緩存,這是在做這非常有效的,但僞代碼是一樣的:

if (is_cached('recent_articles') { 
    return cached_content('recent_articles'); 
else { 
    save('recent_articles', $articles) 
    return cached_content('recent_articles') 
} 

只要確保一定的時間後過期的內容或當你知道它的陳舊 - 無論哪個最有意義。

+0

感謝您的建議..我要切換到cachelite梨包.. – 2011-04-08 12:43:54