Nginx

使用 SPDY 推送,在遙遠的未來過期標頭中是否有任何意義?

  • November 14, 2014

據我了解,在 SPDY 推送中,伺服器提供一個 HTML 文件,在發送之前查看它,並決定我需要圖像/css 資源 XY 和 Z,因此也將它們發送過來。

如果它們已經被我的瀏覽器記憶體,它怎麼知道不打擾?或者,如果您的客戶端使用的是 spdy/3 瀏覽器,那麼嘗試記憶體靜態資源基本上沒有意義?

(顯然不是每個客戶都會,但我對這個案例很感興趣)

根據 Chromium 開發者網站上的資源,這是缺點之一。伺服器不可能知道客戶端是否已經擁有資源,因此這可能是一種浪費的傳輸。

資料來源: http: //www.chromium.org/spdy/link-headers-and-server-hint

如果確實需要優化首頁載入時間:

  • 生成第一個頁面載入期間所需的所有引導靜態文件的簽名(md5/sha 雜湊的子字元串)。這通常只是引導的基本 css + js。從那裡開始,通常 js 正在載入東西(特別是客戶端豐富的應用程序,因此您不需要伺服器推送並且客戶端將適當地重用記憶體)

  • 設置一個持久的cookie“bootstrap-version”設置為引導版本簽名。

  • 當客戶端請求頁面時:

    • 如果引導版本 cookie 不是最新的或不存在,則啟動引導文件的伺服器推送。
    • 否則,假設客戶端記憶體了它們(可能不會,導緻小幅回歸,但在 99% 的情況下會)

這樣,您將獲得非常高的效率,並且由於伺服器推送,首頁載入將有效地看起來像使用記憶體的重複訪問。

Go 和 node spdy 實現允許您使用伺服器推送。AFAIK nginx/apache 模組還沒有這個特性。我希望他們盡快根據應用程序提供的標頭或類似內容添加它。

引用自:https://serverfault.com/questions/545916