在Rails 3.1開發模式下(使用資產管道時),從資產/圖像提供的圖像通過響應頭「Cache Control:must-revalidate」提供。在Rails 3.1中以開發模式啓用圖像緩存
這意味着Google Chrome瀏覽器(看起來只有Chrome瀏覽器)會嘗試多次重新獲取圖像 - 即使在單頁面視圖中也是如此。這導致了所有通過JavaScript操作DOM操作的棘手問題。僅舉幾例:
- jQuery UI的可拖動有時有戲劇性的鼠標光標
- 添加或刪除CSS類引用了圖像閃爍或同時圖像的要求調整(這將始終返回偏移304未修改)正在進行中。
- 附加或替換包含圖像的HTML節點將觸發更多的圖像抓取,這將導致Chrome瀏覽器等待每個圖像的304響應時,其下方的整個節點樹會出現口吃。
我完全可以理解爲開發服務器做一件合理的事情。我甚至可以理解,即使在單個頁面視圖內,Chrome拒絕緩存圖像也是合理的。
那麼,有沒有辦法改變Rails應用於開發中的圖像響應的緩存控制頭?
更新:如同一對夫婦所建議的,更有趣的問題是爲什麼Chrome瀏覽器嘗試在瀏覽視圖中多次重新提取圖片,而其他瀏覽器似乎沒有? (爲什麼這不會導致其他開發者的問題?)
更新x2:我不打算提交這個答案,因爲它只是一個解決方案,恰好足以滿足我的目的,但我們通過預編譯資源,然後丟棄預編譯的CSS,可以解決這個問題。 (這需要鏈輪調試被打開,以虛假的development.rb
)
rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
我想不出一個Rails配置的這一點,也許做一些挖掘鏈輪配置而不是? – 2012-01-18 20:36:08