通過使用 Lighthouse CI 在 Travis 中集成輔助性工具,性能和 SEO 評分測試對所有的合作開發者來說都能顯著提升開發新功能的效率。(圖像來源)(大預覽圖)
光測試 Chrome 和 Firefox 還不夠。看看你的網站在代理瀏覽器和過時瀏覽器中的表現。例如在亞洲有著巨大的市場佔有率(在亞洲多達 35%)的 UC 瀏覽器和 Opera Mini。評估平均網路速度以避免在你的國家出現載入非常慢的情況。使用網路節流和模擬高解析度設備測試。BrowserStack 非常不錯,不過還是要在真機上測試。
k6 允許你寫類似單元測試的性能測試用例。
61. 你測試過輔助工具的性能嗎?
當瀏覽器開始載入頁面,它創建 DOM,如果此時有例如屏幕閱讀器的輔助技術在運行,它也會創建輔助樹。屏幕閱讀器必須查詢輔助樹來獲取信息並讓讀者可用 —— 有時默認直接查詢,有時是按需,並且它可能會消耗一些時間。
當討論到快速到達可交互狀態,通常我們指用戶能儘快 通過點擊鏈接或按鈕來與頁面交互的指標。這個概念與屏幕閱讀器的有細微不同。對於屏幕閱讀器來說,最快可交互時間是指當屏幕閱讀器可以讀出給定頁面的導航並且使用者可以實際敲擊鍵盤來交互時的時間 過去了多少。
Léonie Watson 有一個在輔助性工具的性能方面令人眼界大開的討論並且特別指出載入慢會導致屏幕閱讀器閱讀延遲。屏幕閱讀器本是用來快速閱讀並導航的,因此可能那些視力不好的用戶會比視力好的用戶缺少耐心。
載入大頁面和使用 JavaScript 操作 DOM 會導致屏幕閱讀器語音延遲。請關注這些以前沒注意到的地方,並測試所有可用的平台(Jaws,NVDA,Voiceover,Narrator,Orca)。
62. 是否建立持續監控?
對於快速無限制測試來說持有一個 WebPagetest 實例總是非常受益的。一個類似 Sitespeed,Calibre 和 SpeedCurve 的可持續監控工具能自動報警,給你更詳盡的性能畫像。設置你自己的用戶時間記錄來測試和監控特殊業務指標。並請考慮加入自動性能回歸警報來監控變化。
了解使用 RUM-solutions 來監控性能隨時間的變化。對於像載入測試工具的自動化測試,你可以使用 k6 和它的腳本 API。並了解 SpeedTracker,Lighthouse 和 Calibre。
速效方案
本文的清單相當全面,並且完成所有的優化需要相當一段時間。所以,如果你只有一小時但想獲得巨大性能提升,你要怎麼做?讓我們總結為 12 條易於實現的目標 。顯然,在你開始之前和完成之後,評估結果,包括在 3G 和有線網路連接下的渲染時間和 Speed Index。
評估實際經驗和設置合適的目標。一個很好的目標是追求首次有意義的渲染時間 < 1 秒,同時 Speed Index < 1250 秒,慢速 3G 網路下首次可交互時間 < 5秒,TTI < 2 秒。針對渲染時間和首次可交互時間做優化。
為你的主要模板準備關鍵 CSS,並在放在頁面的 head
標籤內(預算應小於 14 KB)。對於 CSS/JS,使它們小於關鍵文件大小最大預算 gzipped 壓縮後為 170 KB(未壓縮為 0.7 MB)。
儘可能地讓更多的腳本分割,優化,defer 載入或者懶載入,檢查輕量級的可選包並限制第三方包的大小。
使用 <script type="module">
來讓代碼只對舊瀏覽器工作。
試著整個 CSS 規則並測試 in-body CSS。
使用更快的 dns-lookup
,preconnect
,prefetch
和 preload
來添加資源提示來加速分發。
給網路字體分組並非同步載入,在 CSS 中利用 font-display
來加速首次渲染。
優化圖片,並考慮為重要的頁面(例如首頁)使用 WebP。
檢查 HTTP 頭設置的緩存並確保已經被合適地設置。
在伺服器上啟用 Brotli 和 Zopfli 壓縮。(如果不能,別忘了啟用 Gzip 壓縮。)
如果 HTTP/2 可用,啟用 HPACK 壓縮並開始監控 mixed-content 警告。開啟 OSCP 壓縮。
在 service worker 中緩存字體,樣式,JavaScript 和圖片等資源文件。
下載清單 (PDF,Apple Pages)
記住這條清單,你應該就能應對各種前端性能方面的項目。請自由下載可列印版的 PDF 清單,同時為了供您按需定製清單還準備了可編輯的 Apple Pages 文檔 。
下載 PDF 版清單 (PDF,166 KB)
下載 Apple Pages 版清單 (.pages,275 KB)
下載 MS Word 版清單 (.docx,151 KB)
如果你需要更多選擇,你也可以查看 Dan Rublic 總結的前端清單,Jon Yablonski 總結的設計者的 Web 性能清單 和 FrontendChecklist。
出發!
一些優化可能超出你的工作或計劃,或者對於你要處理的老舊代碼可能造出更多麻煩。這都不是問題!請把這個清單作為一個(希望夠全面)大綱,創建適合你的專屬的問題清單。不過重中之重的是優化前測試和權衡你的項目來定位問題。希望大家在 2019 年都能得到不錯的優化成績!
非常感謝 Guy Podjarny,Yoav Weiss,Addy Osmani,Artem Denysov,Denys Mishunov,Ilya Pukhalski,Jeremy Wagner,Colin Bendell,Mark Zeman,Patrick Meenan,Leonardo Losoviz,Andy Davies,Rachel Andrew,Anselm Hannemann,Patrick Hamann,Andy Davies,Tim Kadlec,Rey Bango,Matthias Ott,Peter Bowyer,Phil Walton,Mariana Peralta,Philipp Tellis,Ryan Townsend,Ingrid Bergman,Mohamed Hussain S. H.,Jacob Gro?,Tim Swalling,Bob Visser,Kev Adamson,Adir Amsalem,Aleksey Kulikov 和 Rodney Rehm 對這篇文章的審閱,同時也感謝我們無與倫比的社區,大家會分享從工作學到的,對每個人都有用的優化技術和課程。你們真的是太棒了!
[譯] 2019 前端性能優化年度總結 — 第一部分
[譯] 2019 前端性能優化年度總結 — 第二部分
[譯] 2019 前端性能優化年度總結 — 第三部分
[譯] 2019 前端性能優化年度總結 — 第四部分
[譯] 2019 前端性能優化年度總結 — 第五部分
[譯] 2019 前端性能優化年度總結 — 第六部分
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久鏈接 即為本文在 GitHub 上的 MarkDown 鏈接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。
推薦閱讀: