Chrome 中的 SSL 初始连接速度非常慢

Chrome 中的 SSL 初始连接速度非常慢

我们的客户有一个基于 PrestaShop 的网上商店 (https://www.hoerschiff.at),现在他的主机商安装了 SSL 证书。我们更新了 PrestaShop 的配置,因此所有页面都强制通过 SSL 交付。我们现在面临的问题是,在 Chrome(Safari 也是如此)中通过 HTTPS 加载页面的时间非常慢,而在 Firefox 中加载则正常。

开发者工具显示,许多资源(JS、CSS、PNG 等)的“初始连接”时间非常长(从 5 秒到 1.5 分钟)。这仅在加载完整页面时才会发生。如果我直接加载一个资源(例如https://www.hoerschiff.at/themes/PRS030068/js/megnor/custom.js) 加载得很好。

我也发现了这个问题:Chrome 浏览 https 网站时速度很慢,尤其是内部网站 但由于当资产已被缓存时,网站可以正常加载,因此无法与之相关。

起初我以为这可能是 Apache/SSL 配置问题,但由于它在 Firefox 中正常加载,所以情况应该不是这样。

您知道是什么原因导致初始连接时间这么慢吗?

提前致谢!

答案1

我看了网站https://www.hoerschiff.at/可以看到许多不同的问题。我会将问题分为几组:

  • SSL/TLS 问题
  • HTTP/2 支持
  • 最小化图像
  • 使用来自 CDN 的常见 CSS/JS(例如 jQuery、Font Awesome 4.3 等)
  • 压缩 JS/CSS 文件
  • 在服务器上使用 GZip 压缩(例如针对 JS/CSS 文件等静态文件)
  • 将所有图片放在 CDN 上。例如cloudinary允许在 CDN 上免费托管许多图像(2 GB,7,500 次转换/月)。

我建议你至少对网站进行以下测试:Qualys SSL 服务器www.webpagetest.org验证器.w3.org之后,我建议你将 Apache Web 服务器的配置文件与 Mozilla 建议进行比较,你可以在以下网址找到这里

我建议你先在ssllabs. 你会发现你的 Apache Web 服务器存在严重的安全问题CVE-2016-2107,可通过更新 Web 服务器上的 Apache 和 OpenSSL 软件来修复。由于存在安全问题,该网站仅获得 F 级。

更新 Apache 软件后,您的服务器将支持 HTTP/2 协议,这对您的网站非常有帮助。问题是:您的 HTML 页面加载了 27 个单独的 CSS 文件(!!!)和 26 个单独的 JS 文件。http://www.webpagetest.org/网站(见结果)显示结果如下图所示

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

您可以看到,从您的网站加载的大多数 CSS 和 JS 文件将一个接一个地加载,这实质上增加了加载量。以下几行来自 HTML 文件:

<link rel="stylesheet" href="/themes/PRS030068/css/global.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/autoload/uniform.default.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockcart/blockcart.css" type="text/css" media="all" />
<link rel="stylesheet" href="/js/jquery/plugins/bxslider/jquery.bxslider.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockcurrencies/blockcurrencies.css" type="text/css" media="all" />
<link rel="stylesheet" href="/modules/blockfacebook/css/blockfacebook.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocklanguages/blocklanguages.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockcontact/blockcontact.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockmyaccountfooter/blockmyaccount.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocknewsletter/blocknewsletter.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocksearch/blocksearch.css" type="text/css" media="all" />
<link rel="stylesheet" href="/js/jquery/plugins/autocomplete/jquery.autocomplete.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocktags/blocktags.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockviewed/blockviewed.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/product_list.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/themeconfigurator/css/hooks.css" type="text/css" media="all" />
<link rel="stylesheet" href="/modules/tmnewproducts/tmnewproducts.css" type="text/css" media="all" />
<link rel="stylesheet" href="/modules/tmfeatureproducts/css/tmfeatureproducts.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/tmhomeslider/css/flexslider.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockpermanentlinks/blockpermanentlinks.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocktopmenu/css/blocktopmenu.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blocktopmenu/css/superfish-modified.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockcategories/blockcategories.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/blockuserinfo/blockuserinfo.css" type="text/css" media="all" />
<link rel="stylesheet" href="/modules/paypal/views/css/paypal.css" type="text/css" media="all" />
<link rel="stylesheet" href="/themes/PRS030068/css/modules/tmcmsblock/css/tmstyle.css" type="text/css" media="all" />

<script type="text/javascript" src="/js/jquery/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/js/jquery/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="/js/jquery/plugins/jquery.easing.js"></script>
<script type="text/javascript" src="/js/tools.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/global.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/autoload/10-bootstrap.min.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/autoload/15-jquery.total-storage.min.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/autoload/15-jquery.uniform-modified.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/products-comparison.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blockcart/ajax-cart.js"></script>
<script type="text/javascript" src="/js/jquery/plugins/jquery.scrollTo.js"></script>
<script type="text/javascript" src="/js/jquery/plugins/jquery.serialScroll.js"></script>
<script type="text/javascript" src="/js/jquery/plugins/bxslider/jquery.bxslider.js"></script>
<script type="text/javascript" src="/modules/blockfacebook/blockfacebook.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blocknewsletter/blocknewsletter.js"></script>
<script type="text/javascript" src="/js/jquery/plugins/autocomplete/jquery.autocomplete.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blocksearch/blocksearch.js"></script>
<script type="text/javascript" src="/modules/tmhomeslider/js/jquery.flexslider.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blocktopmenu/js/hoverIntent.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blocktopmenu/js/superfish-modified.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/modules/blocktopmenu/js/blocktopmenu.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/tools/treeManagement.js"></script>
<script type="text/javascript" src="/themes/PRS030068/js/index.js"></script>
<script type="text/javascript" src="https://www.hoerschiff.at/themes/PRS030068/js/megnor/owl.carousel.js"></script>
<script type="text/javascript" src="https://www.hoerschiff.at/themes/PRS030068/js/megnor/custom.js"></script>

是邪恶的。

强烈建议从 CDN 加载常用的 CSS/JS 文件。例如,你可以将以下行替换

<script type="text/javascript" src="/js/jquery/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/js/jquery/jquery-migrate-1.2.1.min.js"></script>

<script src="https://cdn.jsdelivr.net/jquery/1.11.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.migrate/1.2.1/jquery-migrate.min.js"></script>

或者

<script src="https://cdn.jsdelivr.net/jquery/1.11.0/jquery.min.js"
    integrity="sha256-spTpc4lvj4dOkKjrGokIrHkJgNA0xMS98Pw9N7ir9oI="
    crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/jquery.migrate/1.2.1/jquery-migrate.min.js"
    integrity="sha256-xNJPayfMfO6lb77HhrsfSG/a2aH5mPdg920fRGceEFw="
    crossorigin="anonymous"></script>

为了优化您的网站在 Chrome 中的加载速度,您可以在第一行之前添加以下几行<link rel="stylesheet" ...>

<link rel="preload" as="script" crossorigin="anonymous" href="https://cdn.jsdelivr.net/jquery/1.11.0/jquery.min.js"/>
<link rel="preload" as="script" crossorigin="anonymous" href="https://cdn.jsdelivr.net/jquery.migrate/1.2.1/jquery-migrate.min.js"/>
<link rel="preload" as="script" href="/js/jquery/plugins/jquery.easing.js"/>
<link rel="preload" as="script" href="/js/tools.js"/>
<link rel="preload" as="script" href="/themes/PRS030068/js/global.js"/>
...
<link rel="preload" as="style" href="/themes/PRS030068/css/global.css"/>
<link rel="preload" as="style" href="/themes/PRS030068/css/autoload/uniform.default.css"/>
<link rel="preload" as="style" href="/themes/PRS030068/css/modules/blockcart/blockcart.css"/>
...

<link rel="preload"可以通知网络浏览器(Chrome 从 50 版开始,Opera 从 38 版开始)可以加载 CSS/JS/Image/Font之后。网络浏览器将利用这些信息优化文件加载。请参阅这里这里更多细节。

在下一步中,我建议您另外使用加载CSS需要Js加载最多的 CSS/JS 文件异步地。此外,还有非常好的工具,例如批判的咕噜批判演示或者这个允许提取关键路径 CSS从您加载的 27 个 CSS 文件中。将提取您网站上真正使用的 CSS 规则的一小部分。您可以将 CSS 规则包含为排队CSS。您可以加载所有其他 27 个 CSS 文件异步地使用 loadCSS。因此,用户无需等待 7.890 秒即可看到您的网站开始渲染。时间将大大减少。使用 loadCSS 和 requireJs 异步加载所有其他 CSS/JS 文件不会阻塞用户界面。从用户的角度来看,它将从根本上提高您的网站速度。您可以阅读有关关键渲染路径的更多信息这里例如。

答案2

我仍然无法找出问题所在,但事实证明,这种情况只发生在我办公室的互联网访问上。其他地方(大学、朋友、客户等的互联网访问)在每个浏览器中都运行良好。所以这是一种非常奇怪的行为,但由于没有其他人遇到这种情况,而且这是一个预算非常低的项目,所以我没有进一步调查它。

相关内容