2012-03-19 157 views
0

我正在編寫一個web應用程序,並且我有一個嚴重的問題,緩存過多。如果這很重要,我使用CakePHP 2.0。緩存 - 最佳實踐

反正基本上我遇到的問題是瀏覽器太頻繁地緩存我的應用程序。例如,如果我有一個用戶填寫一個表單,然後添加一個Flash消息並將用戶重定向到它們的儀表板,那麼這個Flash消息就會顯示出來,但是直到我刷新頁面纔會出現。因此,如果我離開那個頁面並導航回去,那麼Flash消息仍然存在。這只是一個小的刺激,更大的問題是頁面實際上根據用戶行爲而改變。

例如在管理員端,我可能更新用戶狀態,以某種方式更改他們的儀表板。問題是更新後的儀表板不會在沒有刷新的情況下看到。真是麻煩!

我的問題不是如何解決這個問題,我知道如何停止一起緩存。看起來緩存是網絡應用程序性能的重要組成部分,但我不想一起停止緩存,因爲我可以看到它緩慢下降。

那麼在這些情況下通常會做什麼?我應該停止頁面緩存嗎?看起來像一個極端的解決方案。或者我應該只是鏈接到我所有的頁面,如:

http://mywebsite.com/user?t=<?php echo time(); ?> 

或者還有別的東西我失蹤了?任何建議表示讚賞!

回答

2

請問這裏列出的答案是 - How do I completely disable caching in Cakephp? - 工作嗎?

修復Flash消息問題很難 - 因爲Flash消息是輸出HTML的一部分,所以您無法在後退按鈕事件中消除它。

對於儀表板,我建議關閉瀏覽器緩存...但這不會解決CakePHP具有的任何內置緩存。

聽起來像你所需要的只是在有更新的地方使某個緩存失效 - 你可以在你的add()/ edit()方法中添加一個方法來徹底刪除一個成功的save()事件後的緩存 - 這似乎是唯一可以適用於您的案例的萬無一失的方法。

+0

那麼我所做的是:$ this-> response-> disableCache();到我的AppController的beforeRender()回調。這會調用標題來告訴瀏覽器不要緩存。顯然它仍然緩存圖像而不是HTML/CSS/JS?無論如何,我現在的解決方案似乎是一起停止瀏覽器緩存,然後添加一些CakePHP特定的緩存。這樣我就可以更好地控制什麼和不被緩存。我不知道這是不是一個好主意,但瀏覽器緩存真的搞砸了一切。 – 2012-03-31 15:11:04

+0

可能肯定會緩存圖像 - 這是服務器/ Apache設置,而不是CakePHP設置。如果您可以控制您的服務器/ Apache,則可能需要查看Apache的緩存/過期設置以禁用映像和其他靜態資產緩存。 – Suman 2012-04-02 17:16:40