2022年8月18日,Chrome 開發團隊博客發佈了“Removing HTTP/2 Server Push from Chrome”一文,表示 Chrome 106 和之後的版本將默認禁用 HTTP/2 Server Push 特性
為什麼會被移除?
Server Push 允許網站主動推送頁面所需的資源,而不是被動等待。但實際上很難以此實現性能提升,所以用這個特性的人並不多,使用了 HTTP/2 的站點中,僅有 1.25% 用了 Server Push。很多 HTTP/3 服務器和客户端都沒實現 Push 功能,即使規範中規定了。對很多已經用上 HTTP/3 的 web 服務來説,PUSH 實際上已經過時了
HTTP/2 Server Push 的替代品
103 Early Hints 是個不錯的選擇,它有很多與 Push 相同的優點。與服務端推送資源不同,103 Early Hints 只向瀏覽器發送可能會立即請求的資源提示,並將請求資源的控制權交給瀏覽器--例如,如果HTTP緩存中已經有了這些資源,就不需要再向服務端發起請求
預加載(Preload)關鍵資源也是一種選擇。它允許頁面和瀏覽器一起工作,以便在頁面加載早期優先加載關鍵資源。雖然這個方案需要頁面自身先被加載,但它不會延遲關鍵資源加載
Early Hints
現在的網站越來越複雜,服務器可能需要執行一些重要工作(比如連接數據庫)來生成所請求的頁面。但這種服務器的“思考時間”會在瀏覽器開始呈現頁面前產生延遲。在服務器準備響應的的過程中,連接實際上一直處於空閒狀態(圖中灰色部分即為服務器“思考時間”)
Early Hints 是一個 HTTP 狀態碼,用於在最終響應前發送一個預請求。在服務器忙於生成主要資源(html文檔)同時,允許服務器向瀏覽器發送當前頁面可能使用的關鍵子資源(css,js)的提示,瀏覽器可以根據這些提示,在等待主資源同時,預連接,請求子資源。簡單説,Early Hints 通過提前做一些工作來幫助瀏覽器利用上述的服務器“思考時間”,來加速頁面加載速度
Preload
Preload 則是一個新的控制特定資源如何加載的 Web 標準。通過 <link ref="preload" /> 使用。通過 Preload 加載重要資源是個不錯的選擇
結論
Web 技術需要嘗試一些東西,並在不需要時丟棄。儘管 Push 聽起來很有潛力,但實際使用中問題比預想的更多。Chrome 團隊在設計 Push 過程中學到了很多關於 103 Early Hints 的內容,現在是時候放棄 Push 了
參考
- Removing HTTP/2 Server Push from Chrome
- HTTP/2 push is tougher than I thought
- Faster page loads using server think-time with Early Hints