如何在WordPress上跨主机名并行下载?

时间:2015-12-21 21:07:29

标签: wordpress performance wordpress-plugin pagespeed google-pagespeed

我收到此消息"在主机名之间并行化下载"在GTmetrix上检查我的WordPress网站时> https://gtmetrix.com

以下是详细信息> https://gtmetrix.com/parallelize-downloads-across-hostnames.html

我该如何解决?

2 个答案:

答案 0 :(得分:9)

<强>详情

Web浏览器限制了它们对主机的并发连接数。当需要下载许多资源时,将形成等待下载的积压资源。浏览器将允许浏览器同时连接到服务器,以便下载这些资源,但随后将排队其余并等待请求完成。

等待连接完成所花费的时间称为阻止,减少此阻塞时间可能会导致加载页面更快。下面的瀑布图显示了一个从同一主机加载45个资源的页面。请注意资源在下载之前(棕色段)在等待免费连接时下载(紫色段)的时间。

所以这是在WordPress上实现它的黑客攻击。

为了正常工作,所有子域名/主机名必须具有相同的结构/路径。例如:

  • example.com/wp-content/uploads/2015/11/myimage.jpg
  • media1.example.com/wp-content/uploads/2015/11/myimage.jpg
  • media2.example.com/wp-content/uploads/2015/11/myimage.jpg

添加到functions.php

function parallelize_hostnames($url, $id) {
 $hostname = par_get_hostname($url);
 $url =  str_replace(parse_url(get_bloginfo('url'), PHP_URL_HOST), $hostname, $url);
 return $url;
}

function par_get_hostname($name) {
 //add your subdomains below, as many as you want.
 $subdomains = array('media1.mydomain.com','media2.mydomain.com');
 $host = abs(crc32(basename($name)) % count($subdomains));
 $hostname = $subdomains[$host];
 return $hostname;
}
add_filter('wp_get_attachment_url', 'parallelize_hostnames', 10, 2);

答案 1 :(得分:1)

这主要归功于HTTP / 1.1,其中浏览器平均每个主机名打开6个连接。

如果您使用支持HTTP / 2的提供商通过HTTPS运行,此警告现在通常可以安全地忽略。使用HTTP / 2,现在可以通过单个连接并行加载多个资源。

-

但是,如果您需要修复它,可以按照以下步骤操作:

  1. 创建其他子域名,例如: domain.com static1.domain.com static2.domain.com

  2. 只需将以下代码添加到WordPress主题的functions.php文件中即可。并将$ subdomains值替换为您的子域。

  3. 所有子域/主机名必须具有相同的结构/路径。

    "Locations": {
      "location1": {
        "name": "Nice location",
        "isLocationOf": {
                   'post1': true,
                   'post2': true
                         }
      }
    }
    

    详细了解parallelize downloads across hostnames警告以及您可能不再需要担心的原因。