2012-01-22 44 views
0

我有一個產品頁面。該節目的行動具有下面的代碼:我應該如何緩存一個應該跟蹤每個視圖的頁面?

def show 
    ... 
    LiveView.add_live_view(@product, request) 
    ... 
end 

在這同一個控制器,如果我有:

caches_action :show, :cache_path => (proc do 
    product_path(params[:id], :user_id => user_signed_in? ? current_user.id : nil) 
end) 

我想顯示實時視圖,從request搶奪IP地址。所以,我需要跟蹤每個瀏覽頁面的視圖。但是,如果頁面已被緩存,它將永遠不會觸發LiveView.add_live_view(@product, request)方法。

問題是。我應該緩存這個動作嗎?如果是這樣,應該怎麼做?或者我應該忘記這種方法的緩存?

我應該考慮一種不同的緩存方法嗎?有什麼建議麼?

回答

0

我不知道在應用程序級別緩存是否是正確的解決方案。我建議看看mod_cache哪些在apache層緩存響應。 (如果你正在用乘客運行apache)。

最後,不要忘了這條規則。永遠不要優化,除非你必須。我的意思是,先測試你的應用程序。如果不緩存,不會出現性能損失。你還需要緩存一切嗎?做一些代碼分析,也許你可以使用更好的算法。

編輯時,也請看HTTP狀態碼304。如果用戶刷新頁面,並且您可以傳達沒有任何變化,那麼只需返回304.

+0

我喜歡這個規則。不過,我聽說最好總是緩存一個「show」頁面。如果同一用戶決定點擊重新加載按鈕或再次訪問同一頁面,這是有益的。你對此有何看法? –

+0

我忘了提及,我們的應用程序在Heroku上運行。所以不要認爲我們有權訪問應用程序層。 –

+0

首先我會檢查什麼是不緩存任何東西的影響。此外,如果您有網站分析,請檢查有多少人實際刷新頁面。最後,如果您決定緩存此頁面,請先檢查時間戳,如果沒有更改,則返回304狀態。我真的認爲這是大多數開發人員忘記做的事情。瀏覽器的緩存正是爲此。 –

相關問題