- 錯誤型別:
- HTTP錯誤
- 錯誤名稱:
- 跨主机名并行下载
- 英文名稱:
- parallelize downloads across hostnames
- 錯誤描述:
- 这原则上不是一个错误,而是使用旧的HTTP协议,肯能存在跨域并行下载影响网站加载速度的问题。服务器采用HTTP/2以上协议是不存在该问题的。
如果在您的網站上發現潛在的連線問題,大多數網站速度測試工具都會顯示“跨主機名並行下載”警告。雖然在大多數情況下它很容易修復,但在某些情況下您可以簡單地忽略它。
在本文中,我們將瞭解導致“跨主機名並行下載”警告的原因以及如何解決此問題。
是什麼導致“跨主機名並行下載”問題出現?
“跨主機名並行下載(parallelize downloads across hostnames)”錯誤通常出現在有大量請求的網站上。這是如何發生的:
HTTP 1.x協議決定單使用者客戶端最多可以與任何伺服器建立兩個連線。這意味著如果佇列中有太多資源需要載入,它可能會產生積壓。
另一方面,大多數瀏覽器也有一些限制——每個域最多六個連線。如果您開啟的選項卡太多,您將很容易達到此限制。
在大多數情況下,人們會嘗試重新連線,或者嘗試提供多個子域來避免限制(我們稍後會談到)。
然而,這種情況只發生在HTTP 1.x連線上。
如果您使用HTTP/2和安全連線,這將不再是問題。HTTP/2是修訂版,允許並行下載。當然現在大部分主機服務商,都使用HTTP/2而不是HTTP 1.x。
話雖如此,當您在HTTP/2連線上時,忽略“跨主機名並行下載”警告是安全的。
某些工具(如GTMetrix或Pingdom)可能仍會出現此錯誤——使用不同的名稱——無論這對您來說是否是一個實際問題。
修復“跨主機名並行下載”錯誤
如前所述,為了避免限制,人們試圖使用子域來管理資產,以欺騙瀏覽器並允許更多的並行連線。這種做法稱為域名分片(domain sharding)。
域名分片是一種使用多個子域增加同時下載資源數量的方法。因此,您可以使用域分片來修復“跨主機名並行下載”錯誤。
請記住,域名分片也會留下負面影響,例如:
- DNS查詢時間增加
- 快取功能丟失
- 移動裝置瀏覽器的潛在問題
基本上,域名分片有兩個步驟——設定子域和編輯function.php檔案。
設定子域
域名分片的第一步是建立多個子域或CNAME記錄。但是,這可能會拆分對您的靜態內容的請求。
為此,您可以轉到您的域名管理面板,然後選擇域類別下的子域。(注:不同域名服務商,可能稍有不同)
在空白欄位中輸入子域名,然後單擊建立。您可以重複此步驟以建立多個條目。大多數時候,新增三個子域就足夠了。
設定子域後,您就可以編輯functions.php檔案了。
編輯主題functions.php檔案
域名分片的第二步是編輯主題function.php檔案以並行化主機名。
您可以轉到WordPress儀表盤 -> 外觀 -> 主題編輯器,然後選擇主題函式 (functions.php)。
接下來,將以下程式碼新增到functions.php檔案中:
function parallelize_hostnames($url, $id) { $hostname = par_get_hostname($url); //call supplemental function $url = str_replace(parse_url(get_bloginfo('url'), PHP_URL_HOST), $hostname, $url); return $url; } function par_get_hostname($name) { $subdomains = array('media1.mydomain.com','media2.mydomain.com'); //add your subdomains here, as many as you want. $host = abs(crc32(basename($name)) % count($subdomains)); $hostname = $subdomains[$host]; return $hostname; } add_filter('wp_get_attachment_url', 'parallelize_hostnames', 10, 2);
請注意,您需要使用您建立的子域更改$subdomains值。此外,請確保所有子域都具有相同的路徑以避免任何錯誤。
完成後,單擊更新檔案。就是這樣!
您還可以對CDN提供商(如 KeyCDN)執行相同的步驟來修復“跨主機名並行下載”錯誤。但是,由於大多數CDN提供商使用HTTP/2,因此不建議使用域名分片。
小結
如果您在測試網站時遇到“跨主機名並行下載”警告,請不要驚慌。它是由於瀏覽器和HTTP 1.x連線的限制而發生的。
總之,您可以通過兩個步驟使用域名分片方法修復錯誤:
- 設定子域
- 編輯functions.php檔案
但是,如果您的託管服務提供商已經使用HTTP/2,您可以放心地忽略此錯誤。
評論留言