簡體   English   中英

如何在Rails 3.2中緩存gravatars?

[英]How do I cache gravatars in Rails 3.2?

我寫了一個Gravatar助手來在我的學習應用程序中使用。 “ Users#index”操作列出了所有帶有重力的用戶,即使分頁也會花費一些時間。 考慮到以下幾點,有沒有一種方法可以在Rails 3.2中緩存凹印:

  1. 不使用具有緩存功能的Gravatar插件。
  2. 無需緩存用戶頁面本身; 確實,我只是希望緩存圖像本身,而不必再次從gravatar.com上獲取它們。

     def gravatar_for(user, options = { size: 50 }) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravatar_url = "http://gravatar.com/avatar/#{gravatar_id}.png?s=#{size}" image_tag(gravatar_url, alt: user.name) end 

如果您查看源代碼,您將看到SO不會自己進行圖像緩存。 刷新頁面幾次,您可能會看到凹版仍然是最后要加載的元素。

您可以采取一些措施來提高性能:

  • 在生產模式下運行並正確設置了緩存控制后,瀏覽器將為您執行一些圖像緩存(我想也許可以看一下第321集的相關視頻)
  • 在img標簽中包含圖像尺寸,瀏覽器將在圖像可用之前保留適當的屏幕空間,重繪次數更少,感覺更生動
  • 服務自己的占位符,而不要使用更昂貴的identicons等。

我的問題是為什么你需要這個? 您正在從外部服務器和用戶瀏覽器放置圖像,並且gravatar.com必須對其進行緩存。 這是存在gravatar的原因,無需開發人員的任何工作即可管理化身。 如果您需要緩存凹印機,那么為什么您真正需要它呢?

緩存整個用戶頁面或緩存圖像URL片段都沒有任何區別,因為仍然可以從Gravatar下載圖像。 Gravatar將其Cache-Control標頭設置為最長5分鍾,並且您無能為力。

一種可能是將圖像保存到您可以控制響應頭的另一個位置。

但是,在開發過程中您可以做的一件事是不對頁面進行硬刷新。 在某些瀏覽器中, CMD/CTRL + R或按刷新按鈕將發送帶有Cache-Control:max-age=0請求標頭,從而使您重新下載所有圖像。 您只需再次訪問該頁面即可進行軟刷新(例如:在地址欄中的url上按Enter鍵),它將不會發送該標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM