Hartwell Insurance

我們剛剛為 Hartwell Insurance 推出了全新網站,我真的為此感到自豪。這次的開發方式與大多數以往的 Tomango 網站建設不同,使用了一些新工具和一些經典的網頁標準。

這是一個多頁面、單頁(!)的網站,使用 Hugo 編寫,Hugo 是一個以效能為核心特色的靜態網站生成器。如果你有興趣,我在這裡 列出了很多 Hugo 和靜態網站的優勢

簡而言之,靜態網站生成器會將整個網站預先渲染為 HTML 檔案,並像 1995 年那樣提供服務。

沒有 Apache 或 Node 後端在執行時進行編譯,一切都在建構階段完成。這意味著伺服器;在這個情況下是 Netlify,只需要做一件事——提供檔案。不出所料,提供簡單檔案的速度非常快。

起始點是 Netlify 創建的 Victor Hugo 資料庫。這讓我能夠無需自行設置工具,直接使用 Hugo、PostCSS、Browsersync 和 ES6,非常棒!

接著,我將設計檔案中的所有內容轉移到 Markdown,並在需要的地方放入短代碼。這個網站需要一些自定義的短代碼來處理一些呈現元素,例如展開圓形和全寬背景。但大多數情況下,只是乾淨的語意化 HTML,並加入了一些 CSS 和 JS 增強功能。

例如,下圖所示的兩欄布局。我使用了 CSS Columns,並在 <h1> 上加上 break-after: always;。沒有多餘的包裝器或難以清理的短代碼,只有乾淨的 HTML。

Hartwell Insurance 的多欄布局

對於區塊標題的水波紋效果,我使用了 JS 來預置 <canvas> 元素,然後用 RequestAnimationFrame 進行動畫處理。這為頁面增添了些許動感。

在 Hartwell Profitmaker 部分,我曾考慮使用 Vue.js 來實現計算器,但經過深思熟慮後,我決定用 Vanilla JS 編程。結果,網站的所有 JS 檔案總共才 3.2KB!

我們的計劃是使用 Netlify 進行託管,並藉此獲得 Netlify Forms 的使用權。這讓我可以完全專注於前端開發,根本不需要花時間設置後端。

雖然網站是個漸進式網頁應用(PWA),但緩存失效問題通常不會讓我花太多時間思考。然而,這個網站的 PWA 特性需要我們重視緩存失效,確保當我們更新時,網站不會顯示錯誤的內容。由於我使用的是 Victor-Hugo,我不確定如何最佳處理這個問題,於是花了過多時間在 Webpack 和 Gulp 檔案上嘗試讓檔案名稱加上 hash。

後來,在等待理髮時,我讀了一篇 Netlify 博客文章,介紹他們如何使用 HTTP2 做緩存失效處理,這讓我頓時恍然大悟。

當你請求資源時,他們會在標頭中發送一個 ETag,這是該檔案的 hash。如果 ETag 匹配,則返回無內容,否則返回新的檔案和新的 ETag。沒有 app.klfjlkdsfjdslkfjdslkfdsj.jsapp.js?v=20180112,只有乾淨的 app.js,並即時進行緩存失效。真是太神奇了。

最後,我可以加入 Service Worker。由於 Netlify 的緩存失效系統解決了大多數問題,這變得非常簡單。我選擇了網路優先,並對資源和 HTML 進行緩存回退。這意味著在網速較差的情況下,頁面的載入時間會受到影響,但由於我們使用的是 HTTP2,我希望持久連接和小巧的 ETag 可以保持快速。對於在線連接,每次請求都是最新的並即時更新。離線連接則會回退到每個資源的最後一次緩存狀態。這似乎運行得非常順利,並且當資源更新時,無需顯示更新提示。


結果

WebPageTest 結果顯示良好,速度指數為 456,比 Alexa 前 300,000 名的平均值小了 10 倍。

WebPageTest 結果

TestMySite.io 顯示來自 CDN 邊緣節點的首字節時間約為 2ms。Lighthouse 評測結果也相當不錯。仍有一些改善空間,例如懶加載圖片和內聯 CSS。對於 第二項建議,我並不特別興奮,但我會考慮進行一些懶加載,特別是我已經使用了 IntersectionObserver 來處理一些動畫效果。

Lighthouse 結果

最讓人鼓舞的是,這個網站在全球的速度表現相當快。大多數 Tomango 客戶(及其客戶)主要集中在英國,我們有一個專用伺服器位於薩里,能很好地服務本地市場。令我驚訝的是,從美國、澳洲和日本連接到我們伺服器的速度大幅下降。他們僅僅在等候首字節的時間就達到了大約 500ms,更不用說下載每個資源了。

由於 Hartwell Insurance 是一家美國公司,如果將其放置在我們的伺服器上,將會大幅延遲其當地回應時間。因此,選擇 Netlify 是主要原因之一。他們提供全球 CDN 託管,無論身處何處都能迅速加載。


這個專案的開發過程非常有趣,能在生產環境中實際應用新技術,並從中獲得真實的效能和可用性改善,讓我感到非常高興。即使是使用經典的網站技術來提供文件夾和檔案,也是一件有趣的事,當你已經習慣使用動態系統一段時間後,這樣做有一種純粹的樂趣。


這篇文章最初發表於 我的網站