Skip to main content

Hugo 中的快取

本文專門介紹 Hugo 的所有快取,因為一般用戶不太了解這些。

快取是什麼

把計算過的東西存下來,下次用就不用重算直接讀取之前的結果,是一個簡單且強大的軟體加速方法,英文是 cache,中文是快取。

Hugo 的快取

  1. --disableFastRender: 這不是快取,是取消偷懶模式,Hugo live reload 預設只會部分更新,此 flag 要求 Hugo 全站更新重建
  2. Configure file caches 所有的快取選項設定,這裡只列最重要的幾個
    1. assets 如 CSS, SASS, JS 資源
    2. getresource 源碼中使用到 GetRemote 的內容
    3. images 影像處理快取
    4. modules 使用 Hugo module 安裝的 modules
  3. --ignoreCache: 構建網站時無視上述快取內容,但是也不是全部無視,比如 module 還是不會重複下載
  4. --noHTTPCache: 設定 live reload 的 server head 加上不要快取,也就是說本地開發的瀏覽器獲取所有資源都不依賴快取,不過 favicon 使用自己的另一套快取系統,與 HTTP 快取無關
  5. partialCached: 快取 partial 模板,context 後面可給多個參數用作快取鍵,每個 site 的快取不共用(site: 每一個語言、role、version)
  6. --templateMetrics --templateMetricsHints: 用於效能分析,裡面有一個項目是分析該模板是否可快取
  7. Configure output formats: 可設定自訂輸出的權重為 0 或 1,這樣就會在所有東西渲染前先執行,你就可以把在這個輸出裡面寫自己的快取,比如使用 hugo.Store 或是真的輸出一個 JSON 作為快取,不過我實際使用發現這個在 live reload 有時候會有問題

作為一般用戶最應該設定的是 --noHTTPCache 這樣能確保不是瀏覽器作怪,--disableFastRender 用於處理 live reload 時某些東西沒有更新,比如更新 A 會影響 B,B 影響 C,最後 C 沒有更新,這就可以使用 --disableFastRender 解決。

部署快取

部署時需要重新構建整個網站,而部署快取主要是加速圖像處理,這是所有快取裡面最耗費 CPU 效能(最花時間)的東西,請參見官方在論壇的範例完成1

大多數服務商的快取時間只維持一週,如果你一週之內都沒有更新網站快取即失效。

快取資料夾

找到資料夾的方式是在專案目錄中使用 hugo config | grep cachedir,以 macOS 為例會在 ~/Library/Caches/hugo_cache

Footnotes

  1. 會需要特別設定這個是因為服務商對 Hugo 沒有自動偵測快取,這些設定主要是把 Hugo 的設定偽裝成其他 JS 工具鏈,這就是為什麼 Cloudflare 快取設定裡面會說到 First, your project must have both a package.json and package-lock.json file in the project root.,這其實是把專案偽裝成 11ty。