關於前端快取中,指紋與查詢字串的區別
阿新 • • 發佈:2018-12-16
文章目錄
Sprockets 把所有 JavaScript檔案連線為一個主 .js 檔案,把所有 CSS 檔案連線為一個主 .css 檔案。我們可以按需定製連線檔案的方式。在生產環境中,Rails會在每個檔名中插入SHA256指紋,以便Web瀏覽器快取檔案。當我們修改了檔案內容,Rails會自動修改檔名中的指紋,從而讓原有快取失效。
Sprockets只用指紋的方式是在檔名中新增檔案內容的雜湊值,並且通常會新增到檔名末尾。例如,對於 CSS 檔案 global.css ,新增雜湊值後文件名可能變為:
global-908e25f4bf641868d8683022a5b62f54.css
以前呢,Rails採用的策略是,通過內建的輔助方法,為每一個指向靜態資原始檔的連結新增基於日期生成的查詢字串。
global.css?1309495796
現在都一致認同使用指紋的方式,查詢字串有如下缺點:
1、“避免在可快取的資源上使用查詢字串”。他發現,在使用查詢字串的情況下,有5%——20%的請求不會被快取。對於某些CDN,通過修改查詢字串根本無法是快取失效。
【這就很坑爹了】
2、在多伺服器環境下,不同節點上的檔名有可能發生變化。
如果查詢字串是基於時間來的話,當靜態資原始檔被部署到某個節點上時,無法保證檔案的時間戳保持不變,這樣,對於同一個檔案的請求,不同伺服器可能返回不同的檔名
3、快取失效的情況過多
使用指紋可以避免使用查詢字串的這些缺點,並且能夠確保檔案內容相同時檔名也相同。(指紋是根據檔案內容來計算的)