分类: WordPress优化

  • 深入研究网络延迟对WordPress网站的影响

    深入研究网络延迟对WordPress网站的影响

    网络上的许多文章往往主要关注前端WordPress优化和加快网站速度的快速方法。服务器优化(例如网络延迟)有时会被忽视或忽视。因此,我们认为深入了解网络延迟的重要性及其在加载不同区域时对WordPress网站的影响会很有趣。

    虽然CDN绝对可以帮助减少网络延迟,但您的主机服务器位置仍然非常重要,特别是如果您在非常特定的地理位置为访问者提供服务。延迟很重要,我们将向您展示几个原因。

    什么是网络延迟?

    网络延迟是指通过网络传输数据所涉及的时间和/或延迟。换句话说,一个数据包从一个点到另一个点需要多长时间。如今,这通常以毫秒为单位进行测量,但是,根据网络的不同,它也可能是秒。越接近零越好。

    延迟是信号在地理距离以及通过各种通信设备时引入的等待时间。 – Whatis.com

    换句话说,距离越远,延迟越大,这等同于更长的延迟。当涉及到通过光纤电缆传输的数据时,您无法超越光速。例如,下面是Google Cloud Platform网络的地图。他们有数千英里的电缆在海底覆盖整个地球。这就是为什么它是世界上最快的网络之一的原因之一。即使拥有这种广泛的最先进网络,仍然总是会有延迟延迟。

    光纤电缆的延迟

    光纤电缆的延迟

    有几个不同的因素会导致网络延迟,其中包括:

    • 传输延迟: 不同类型的介质,例如无线或光纤连接,都会引入某种类型的延迟,因为它们只能推出这么多位。例如,光纤连接的传输延迟将低于 T1 线路。您还必须考虑数据包的大小。
    • 传播延迟: 这是数据包传播所需的时间。这可能包括距离、网络延迟等。
    • 排队延迟: 如果超出带宽,可能会出现排队延迟,数据必须在主机或路由器处等待。这可能会受到网络拥塞的影响。

    为什么网络延迟很重要

    有些人可能会争辩说,网络延迟并不是很重要,但是,这可能与您选择托管WordPress网站的位置有关。对于媒体和您的资产(例如图像、JavaScript、CSS、视频),CDN可以通过从更近的服务器提供副本来解决很多额外的延迟问题。但是,在大多数配置中,您仍然需要查询您的托管服务器以获取初始DOC加载。这就是延迟很重要的原因!

    Trainline将整个渠道的延迟减少了0.3秒,客户每年额外花费800万英镑(约合1150万美元)。– WPO 统计

    对于为特定地理位置的访客提供服务的企业,延迟尤其重要。例如,假设您在悉尼有一家电子商务商店,您90%的客户来自澳大利亚。将您的网站放置在澳大利亚的服务器上,而不是将其托管在欧洲或美国,您的企业肯定会受益。我们将在下面讨论它对您的网站的影响有多大。

    比较Google Cloud网络延迟

    距离是延迟延迟的主要原因之一。然而,重要的是要记住,延迟不仅受距离的影响,还受它所产生的跳数、中间路由器等的影响。测量网络延迟的几种方法包括Ping、Traceroute和MTR。在这个例子中,我们将简单地使用ping时间并运行一些traceroute测试。如果您真的想深入研究数据,可以运行traceroute命令

    因此,我们在位于不同地理区域的Google Cloud Platform上启动了几台测试机器。许多其他托管服务提供商使用Google Cloud的标准层网络,这会导致速度变慢。

    • perf1主机(位于美国爱荷华州)
    • perf2主机(位于澳大利亚悉尼)
    • perf3主机(位于德国法兰克福)

    然后我们使用KeyCDN的免费Ping测试工具 ,它允许我们同时从14个位置进行测试。请记住,ping时间越短越好, 因为这与数据通过Internet传输到其目标地址然后返回给您所需的延迟时间(以毫秒为单位)直接相关。我们还使用了他们的traceroute工具

    Perf1(爱荷华州,美国)

    对于位于美国爱荷华州的测试服务器,位于美国的位置的ping时间要低得多(到达拉斯的平均ping时间为16毫秒)。当您开始深入欧洲或新加坡时,您开始体验更高的平均ping时间(到新加坡的平均ping时间为244毫秒)。

    Ping时间 perf1(美国)

    Ping时间 perf1(美国)

    如果我们比较Traceroute,您可以看到一个示例,从美国爱荷华州到德国法兰克福需要7个额外的网络跃点(与从达拉斯的10个跃点相比)。这就是为什么重要的是要记住,网络跃点也会影响网络延迟。

    Traceroute perf1(美国)

    Traceroute perf1(美国)

    Perf2(澳大利亚悉尼)

    对于位于澳大利亚悉尼的测试服务器,澳大利亚和亚太地区的ping时间要低得多(到悉尼的平均ping时间为1毫秒)。当您开始深入欧洲或南美洲时,您开始体验更高的平均ping时间(到圣保罗的平均ping时间为319毫秒)。

    Ping时间perf2(澳大利亚)

    Ping时间perf2(澳大利亚)

    如果我们比较Traceroute,您可以看到一个示例  ,从澳大利亚悉尼到德国法兰克福需要14个额外的网络跃点

    Traceroute perf2(澳大利亚)

    Traceroute perf2(澳大利亚)

    Perf3(法兰克福,德国)

    对于位于德国法兰克福的测试服务器,欧洲甚至美国的ping时间要低得多,这可能是由于两者之间的快速骨干连接(到阿姆斯特丹的平均ping时间为7毫秒)。当您开始深入到亚太地区或南美洲时,您开始体验更高的平均ping时间(到新加坡的平均ping时间为308毫秒)。

    Ping时间 perf3(德国)

    Ping时间 perf3(德国)

    如果我们比较Traceroute,您可以看到一个示例  ,从德国法兰克福到巴西圣保罗需要11个额外的网络跃点

    Traceroute perf3(德国)

    Traceroute perf3(德国)

    因此,正如您在上面看到的,距离越大,与更高的ping时间和构成网络延迟的额外网络跳数直接相关。这就是为什么您应该战略性地定位您的WordPress网站以减少这两个因素的原因。

    比较区域之间的Google Cloud延迟

    上面我们正在测试与ping服务器相关的服务器所在位置的Ping时间。但是Google Cloud Platform区域本身之间的延迟呢?Geek Flare在9个不同地区之间进行了出色的测试。这可以让您快速了解放置在一个区域与另一个区域时由于延迟而发生的延迟。

    Google Cloud Platform延迟(来源 Geek Flare)

    Google Cloud Platform延迟(来源 Geek Flare)

    比较页面加载时间

    当然,我们忽略了总页面加载时间。事实上,这就是一些最有趣的数据所在。但是,请记住,这包括其他因素,例如TTFB。所有三个测试站点都是相同的,运行全新安装的WordPress,并安装了二〇一七主题。我们也在使用Pingdom,所以时间是从他们的测试服务器位置测量的。

    Perf 1(爱荷华州,美国)

    我们使用位于美国爱荷华州的服务器从三个不同的测试地点进行速度测试,结果如下。

    速度测试 perf1 达拉斯

    速度测试 perf1 达拉斯

    速度测试 perf1 澳大利亚

    速度测试 perf1 澳大利亚

    速度测试 perf1 斯德哥尔摩

    速度测试 perf1 斯德哥尔摩

    正如我们在上面看到的,从美国境内(靠近托管服务器)加载站点与从全球加载站点之间存在巨大差异。

    Perf 2(澳大利亚悉尼)

    我们使用位于澳大利亚悉尼的服务器从三个不同的测试地点进行速度测试,结果如下。

    速度测试 perf2 达拉斯

    速度测试 perf2 达拉斯

    速度测试 perf2 墨尔本

    速度测试 perf2 墨尔本

    速度测试 perf2 斯德哥尔摩

    速度测试 perf2 斯德哥尔摩

    正如我们在上面看到的,从澳大利亚境内(靠近托管服务器)加载站点与从全球加载站点之间存在巨大差异。

    Perf 3(法兰克福,德国)

    我们使用位于德国法兰克福的服务器从三个不同的测试地点进行速度测试,结果如下。

    速度测试 perf3 达拉斯

    速度测试 perf3 达拉斯

    速度测试 perf3 墨尔本

    速度测试 perf3 墨尔本

    速度测试 perf3 斯德哥尔摩

    速度测试 perf3 斯德哥尔摩

    正如我们在上面看到的,从欧洲内部(靠近托管服务器)加载站点与从全球加载站点之间存在巨大差异。

    如果这些页面负载测试不能说服您,我们不知道会怎样!例如,美国爱荷华州的测试站点从达拉斯加载仅需要368毫秒。但是从澳大利亚悉尼加载需要2.14秒。这就是为什么位置很重要!同样,您可以通过使用CDN将媒体资产靠近访问者来帮助减少总加载时间。但是您总会遇到来自主机服务器的加载时间和延迟,因此请明智地选择。

    选择合适的位置来托管您的WordPress网站

    大多数WordPress托管服务提供商通常允许您从不同的位置进行选择来托管您的网站。这使您可以战略性地将站点放置在需要确保低延迟和TTFB的位置,以及极快的加载时间。您还可以为每个单独的站点选择不同的位置。

    Google Cloud数据中心位置

    Google Cloud数据中心位置

    不确定要选择哪一个?以下是一些提示。

    提示 1 – 检查谷歌分析

    您可以做的第一件事就是在Google Analytics中查看访问者的地理位置。在下面的这个示例中,您可以看到超过90%的流量来自美国。因此,在大多数情况下,您希望将WordPress网站放在美国的服务器上。您可以将数据过滤到城市,但我们通常会推荐像美国爱荷华州这样的中心位置。

    Google Analytics中的地理数据

    Google Analytics中的地理数据

    提示 2 – 检查电子商务数据

    如果您经营电子商务商店,请确保还检查您的客户来自哪里。这当然是您产生收入的方式,因此这些是您最重要的访问者。这应该与您上面的流量一致,但是,情况并非总是如此。如果您有电子商务数据设置或目标,您可以轻松地将该信息叠加在地理数据之上,以做出更明智的决定。

    提示 3 – 进行快速延迟测试

    有很多方便的免费工具可以为不同的云提供商测量您当前位置的延迟。这可以帮助您快速评估哪个区域可能是您站点的最佳选择。

    测量Google Cloud Platform延迟

    测量Google Cloud Platform延迟

    您还可以使用CloudHarmony,这是一个云比较工具。您可以测试诸如延迟、DNS、上行链路和下行链路等内容。

    CloudHarmony网络测试

    CloudHarmony网络测试

    减少网络延迟的快速方法

    总而言之,这里有一些减少网络延迟的快速方法。

    • 正如我们在上面向您展示的,将您的WordPress网站放在更靠近访问者的服务器上应该是第一要务。这有助于减少ping时间和网络跳数。
    • 利用内容交付网络(CDN) 为来自全球POP的缓存资产提供服务。这有助于消除可能不在您的主机服务器附近的访问者的网络延迟。
    • 借助并行化,利用HTTP/2协议最大限度地减少往返次数。
    • 减少外部HTTP请求的数量。每个都可以根据其服务器的位置增加自己的延迟。
    • 使用具有快速查找时间的优质DNS提供商。
    • 在页面加载时利用预取和预渲染在后台执行任务。
    • 实施我们在本大型指南中提供的一些高级技巧如何加速您的WordPress网站(终极指南)

    小结

    希望现在您对网络延迟、其重要性以及它如何影响您的WordPress网站有了更多了解。为确保快速加载时间,请确保选择主机与访问者和客户最接近的服务器。你觉得呢?你有没有什么想法?您是否曾经因为网站放置在错误的位置而经历过缓慢的加载时间?请在下面的评论中告诉我们。

  • 如何减少WordPress网站的HTTP请求数量

    如何减少WordPress网站的HTTP请求数量

    您网站的HTTP请求越多,加载速度就越慢。因此,如果您可以减少HTTP请求的数量并优化它们的加载方式,您就可以提高网站的性能

    在这篇文章中,我们将带您了解有关如何减少WordPress上的HTTP请求的所有信息。

    我们将从HTTP请求的基本介绍、它们的重要性以及如何分析WordPress站点的请求开始。

    然后,我们将分享一些技巧和策略,您可以实施这些技巧和策略来减少站点的请求。除了帮助您处理GTmetrix中的“减少HTTP请求”消息外,这些策略还有助于处理Google PageSpeed Insights中的“避免链接关键请求”消息。

    1. 什么是HTTP请求?
    2. 为什么减少HTTP请求很重要?
    3. 如何查看和分析您网站的HTTP请求
    4. 如何在WordPress中优化和减少HTTP请求
    5. 减少HTTP请求的最佳WordPress插件

    什么是HTTP请求?

    当你建立一个网站时,它有很多不同的部分。您有在页面上使用的不同图像文件、控制内容外观的CSS样式表、添加所有酷功能的JavaScript文件,等等。

    当有人访问您的网站时,他们的浏览器需要一种方法来从您的服务器下载该页面所需的所有资源。为此,它为每个单独的资源向服务器发出HTTP请求

    例如,它可能会说,“嘿服务器,我需要那个coolimage.png文件”和“嘿服务器,我还需要该联系表单插件的CSS样式表”。然后服务器用相关文件响应这些请求。

    一旦网络浏览器获得这些文件,它就可以为您的访问者组装网页。当然,它比那要复杂一些,但这是基本思想。

    HTTP是超文本传输​​协议的缩写,是这些计算机(访问者的浏览器和您的网络服务器)进行通信的方式。

    需要理解的一件重要事情是每个单独的元素都是一个单独的HTTP请求。例如,如果网页上有五个图像文件,浏览器需要发出五个单独的HTTP请求,每个图像一个。

    同样,如果您使用四个WordPress插件并且每个插件都添加了自己的CSS样式表,那么访问者的浏览器将需要发出四个单独的HTTP请求,每个插件的样式表一个。

    为什么减少HTTP请求很重要?

    减少HTTP请求的重要性

    一般来说,您网站的HTTP请求越多,加载速度就越慢。因此,如果您想让您的网站加载速度更快,您需要优化并减少您的网站所需的HTTP请求数量。

    虽然这有点过于简单化,但基本思想是,Web浏览器只会在完成所有HTTP请求下载后才向您的访问者显示该网站(尽管有一些策略告诉浏览器可以等待某些文件)。

    因此,如果一个网站在显示页面之前必须发出70个HTTP请求,这将比它必须发出40个HTTP请求需要更长的时间。

    此外,某些HTTP请求会“阻塞”其他HTTP请求,这意味着浏览器在下载完之前的HTTP请求之前无法开始下载某些HTTP请求。

    底线是:当您发出更少的HTTP请求时,您的网站加载速度会更快。

    如何查看和分析您网站的HTTP请求

    上面,您了解到在所有条件相同的情况下,减少HTTP请求的数量将加快您的网站速度。然而,所有HTTP请求并不总是“相等”的。一些HTTP请求比其他请求大。有些比其他的慢。

    例如,请求一个巨大的3MB图像文件将比请求一个微小的20KB图像花费更长的时间。

    如果您想对您的网站进行最大的改进,首先关注大的、加载缓慢的HTTP请求将获得最大的投资回报。

    要分析您站点的HTTP请求,您可以使用称为Waterfall analysis的东西。

    大多数速度测试工具都提供了这一点,但GTMetrixPingdom的接口非常方便。您还可以使用浏览器的开发人员工具。但是,我们将使用GTmetrix作为本次测试的示范。

    插入URL后,您将在顶部看到一个基本摘要框。这会显示您的站点有多少HTTP请求,但它不会分解单个请求:

    GTMetrix检测网站HTTP请求数量

    要分析您的个人请求,请转到下面的Waterfall选项卡。

    在这里,您将看到站点上每个单独的HTTP请求的列表以及有关该HTTP请求下载所需时间的信息:

    GTMetrix测速工具瀑布图

    您可以看到并非所有HTTP请求都是相同的。例如,839.3 KB的图像需要1.12秒,而57.6 KB的图像仅需要87.5毫秒:

    不同体积相同文件HTTP请求时长

    您还可以通过在服务器上搜索该插件文件夹的名称来查找来自您正在使用的不同WordPress插件的HTTP请求。例如,您可以看到WooCommerce添加了七个自己的HTTP请求:

    WooCommerce插件HTTP请求数量

    通过这种方式,您可以查看您使用的任何插件是否添加了大量HTTP请求(尤其是加载缓慢的请求)。

    如何在WordPress中优化和减少HTTP请求

    概括地说,有两种广泛的策略可以减少HTTP请求:

    • 删除HTTP请求。如果可能,您应该完全删除所有不必要的HTTP请求。例如,如果您有一个插件没有为您的网站增加任何价值,并且正在加载自己的CSS和JavaScript,只需完全删除该插件即可摆脱其所有HTTP请求。
    • 合并HTTP请求。如果您有绝对必须加载的HTTP请求,您可以将它们合并到一个文件中。例如,代替六个小的CSS文件,您可以将它们组合成一个更大的CSS文件,它仍然会加载得更快,因为浏览器需要发出更少的请求(HTTP/2并不总是如此,我们将下面讨论)。

    我们将从专注于删除HTTP请求的策略开始,然后我们将讨论如何组合剩余的HTTP请求。基本思想是去除你能去除的东西,然后组合剩下的东西。

    1. 删除不必要的WordPress插件

    首先,您需要使用瀑布分析从插件中提取所有请求。您可以通过搜索“插件”来实现这一点,这将提取来自wp-content/plugins文件夹的每个HTTP请求。

    如果您将鼠标悬停在文件名上,您可以看到它来自哪个插件。例如,在这里您可以看到来自您可能正在使用的滑块插件的请求。

    进一步挖掘会发现Slider Revolution添加了三个自己的HTTP请求,即使这个测试页面不包含任何滑块:

    如何查看HTTP请求来自哪里

    如何查看HTTP请求来自哪里

    如果您将 Slider Revolution 用于关键滑块,那么您可能需要保留它。但是,如果您安装它来测试它,然后删除了滑块,而您现在并没有真正使用它……那么您应该删除它以摆脱那些HTTP请求。

    基本上,您想浏览整个列表并问问自己每个插件是否真的为您的网站增加了价值。如果插件不是(但正在添加HTTP请求),那么最好将其删除。

    2. 用更轻量级的插件替换重型插件

    修剪掉任何不必要的插件后,下一步是查看是否可以用更轻量级的替代品替换您正在使用的任何插件。

    例如,假设您想向您的网站添加社交分享按钮。这是一个很好的功能,但一些社交分享插件可以添加很多HTTP请求。

    例如,流行的AddThis插件添加了六个自己的HTTP请求(包括一些外部请求——稍后会详细介绍):

    AddThis插件HTTP请求数量

    您可以通过使用更优化的替代方案(例如NovaShareGrow by MediaVine )来减少大量请求。

    3. 有条件地加载全站不需要的脚本

    此时,您应该已经删除了站点上任何地方不需要的所有插件。然而,还有一类插件可能会导致问题——仅在您网站的特定部分需要的插件,但在任何地方都加载了它们的脚本。

    例如,以流行的Contact Form 7 插件为例。您可能只需要在几个页面上使用此插件(例如您的“联系我们”页面)。但是,Contact Form 7会在您网站的每个页面上加载其脚本。因此,例如,即使您的博客文章没有任何联系表单,Contact Form 7仍在向您的博客文章添加一些HTTP请求。

    另一个例子可能是WooCommerce,如果您仅将其用作支付处理器。WooCommerce仍然会在任何地方加载它的脚本,即使你真的只需要在这个用例的购物车和结账页面上使用它们。

    这里的高级策略是仅在需要时有条件地加载插件。例如,您可以让Contact Form 7加载到您的“联系我们”页面,但在其他地方禁用它。

    如果您不是开发人员,则可以使用Asset CleanUpPerfmatters等插件无需代码即可完成此操作。使用Perfmatters,您首先需要启用脚本管理器。然后,您可以打开脚本管理器以查看页面上加载的所有脚本并禁用任何不需要的脚本:

    Perfmatters插件中的脚本管理器

    Perfmatters插件中的脚本管理器

    请小心,因为如果您不小心禁用了真正需要的脚本,可能会导致问题。虽然这是一种有用的策略,但它也是一种高级策略。

    如果您没有信心,您可能只想跳过此步骤或聘请开发人员来帮助您。

    4. 删除不必要的图像(并优化其余图像)

    使用得当,图像使您的网站更加用户友好和吸引人。它们为您的网站增加了价值。

    但是,您站点上的每个图像都是一个单独的HTTP请求。因此,如果您的图像没有增加价值,最好将其删除以消除这些HTTP请求。

    例如,那个有趣的GIF值得吗?可能是……但也可能不是——每当您向内容添加更多图像时,您都需要考虑权衡。

    最后,确保调整大小并压缩剩余的图像。虽然这本身不会减少HTTP请求的数量,但会减少这些HTTP请求的大小,从而使它们加载得更快。

    5. 对图片和视频使用延迟加载

    使用延迟加载,您的站点将等待加载首屏图像、视频和iframe,直到用户开始向下滚动。

    由于这些资源不会立即加载,因此无需为初始页面加载发出HTTP请求。

    从WordPress 5.5开始,WordPress现在包含使用HTML加载属性的图像原生延迟加载。对于其他一些实现延迟加载的方法(包括视频文件),您可以查看我们的WordPress延迟加载完整指南

    6. 限制自定义字体的使用和/或使用系统字体(图标字体相同)

    自定义字体非常适合改善您网站的设计和用户体验。但是,您需要注意如何使用它们,因为您使用的每个自定义字体类型都会添加另一个HTTP请求。

    如果您打算使用自定义字体,请确保使用少量字体。您真的需要为帖子标题和帖子正文使用不同的字体吗?或者你可以使用相同的字体吗?你真的需要所有五种字体权重吗?或者你可以只选择两个?

    这同样适用于Font Awesome和IcoMoon等图标字体。图标字体可能很有用,但您可能不需要加载多个图标字体库。最好只选择一个图标字体库并坚持下去。

    最后,如果您想更进一步,完全消除与您站点字体相关的HTTP请求,您可以考虑使用系统字体堆栈。虽然这会降低您在设计方面的灵活性,但这也意味着您的访问者不必加载任何字体文件来呈现您的网站。

    7. 禁用WordPress表情符号

    默认情况下,WordPress添加自己的表情符号HTTP请求。虽然它只是一个5.1KB的HTTP请求,但这个文件长期以来一直是WordPress性能爱好者的眼中钉。查看如何禁用WordPress表情符号的教程

    最简单的选择是安装并激活free Disable Emojis(GDPR友好)插件。但是,您可以阅读我们的完整指南以了解其他一些选项。

    执行此操作后,您的HTTP请求数将减少1,您仍然可以使用表情符号 。

    8. 减少/消除第三方HTTP请求

    到目前为止,我们主要关注减少对WordPress站点服务器上文件的HTTP请求。但是,访问者的浏览器可能还需要从第三方服务器请求文件。

    这些请求可能会更加麻烦,因为您的站点受这些第三方服务器速度的支配。

    一些例子:

    • Google Analytics – 跟踪脚本托管在 Google 的服务器上,但访问者的浏览器仍需要下载该文件。
    • 嵌入的YouTube视频– 您会看到很多对YouTube服务器的HTTP请求。
    • 第三方广告服务– 您会看到大量与投放您的广告相关的第三方请求。
    • Google Fonts(在 Google 的 CDN 上)——您会看到第三方请求Google服务器加载您的字体文件。

    您可以将上面的许多相同策略应用于这些第三方HTTP请求。

    例如,如果一个插件添加了它自己的第三方请求(就像上面的AddThis插件那样),你可以删除它并使用更优化的东西。

    对于YouTube视频,您可以延迟加载它们并用图像缩略图替换初始页面加载。这将延迟添加这些HTTP请求,直到访问者想要播放视频。

    对于必要的第三方脚本,例如Google Analytics或Facebook Pixel,您可以尝试在本地托管这些脚本。

    WP Rocket具有内置的附加组件来在本地托管Google Analytics和Facebook Pixel,或者您可以使用像CAOS(完整分析优化套件)这样的插件。

    我们还有一些指南可能会有所帮助:

    9. 将图像与CSS Sprite结合

    此时,您应该希望能够从您的站点发出更少的HTTP请求。现在,是时候研究如何组合剩余的HTTP请求了,从图像开始。

    优化站点上图像的另一种方法是将单独的图像合并为一个图像文件。然后,您可以使用CSS在需要的地方仅显示该图像文件的一部分。这是一种称为CSS sprites的策略。

    CSS sprites最适合装饰图像,例如徽标变体或图标。您不应该将CSS sprites用于信息图像(如博客文章正文中的图像),因为有两个大缺点:

    • SEO – 因为您将图像组合成一个图像文件,所以您无法在Google搜索中对单个图像进行排名。
    • 可访问性——因为你不能给图像添加替代文本,使用屏幕阅读器的人将无法理解加载了CSS sprites的图像(尽管有一些策略可以解决这个问题)。

    如果您仍然对这个主题感到困惑,这里有一个Amazon的CSS sprite文件示例——您可以看到它是如何包含一堆徽标变体以及一些图标的。亚马逊使用CSS来确保在每个位置只显示该图像文件的相关“部分”:

    Amazon的CSS sprite文件示例

    来自亚马逊的CSS sprites示例。您可以使用 CSS 来“定位”组合图像的特定部分。

    不幸的是,没有用于CSS sprites的“设置并忘记它”的WordPress插件。但是,您可以找到提供帮助的工具,例如CSS Sprite Tool

    1. 将要合并的图像上传到该工具。
    2. 然后,该工具将为您提供一个组合图像文件,以及您上传的每个图像的一些CSS代码。
    3. 将合并的图像文件上传到您的WordPress网站。
    4. 使用CSS代码在您的内容中显示图像。提供的CSS将自动仅选择组合图像文件的适当部分。

    10. 合并CSS和JavaScript文件

    在您的WordPress主题和插件之间,您的站点可能会加载多个CSS样式表和JavaScript文件,这意味着多个HTTP请求仅用于浏览器下载呈现页面所需的CSS和JavaScript。

    为了减少所有这些单独的请求,您可以将这些单独的文件/样式表合并到一个文件/样式表中。这称为文件组合文件串联,具体取决于您使用的工具。

    许多WordPress缓存插件包括合并CSS和JavaScript文件的功能。

    转到WP Rocket设置中的File Optimization选项卡。然后,启用缩小,然后合并文件:

    如何在WP Rocket中结合CSS和JavaScript

    如何在WP Rocket中结合CSS和JavaScript

    如需更详细的外观,请查看我们完整的WP Rocket教程

    您还可以使用Autooptimize合并CSS和JavaScript文件。要合并文件,请转至Settings → Autoptimize并选择以下选项:

    • Aggregate JS-files
    • Aggregate CSS-files

    如需更详细的外观,请查看我们完整的Autoptimize教程

    文件合并并不适合于HTTP/2服务器,HTTP/2旨在更有效地传输多个小文件,这意味着一个大的CSS/JS文件和多个小文件之间的差异较小。

    基本上,如果是HTTP/2服务器您可能不需要执行此步骤来改进页面加载时间。我们建议您仍然对其进行测试,因为它仍然对某些网站有益,但您也可能不会注意到实际页面加载时间的任何差异。

    但是,许多性能测试工具如GTmetrix仍然无法识别HTTP/2,因此GTmetrix可能仍会显示“减少HTTP请求”消息并降低您的分数。但请记住,分数并不像实际页面加载时间那样重要

    11. 延迟渲染阻止JavaScript

    推迟渲染阻止JavaScript本身并不能消除HTTP请求。但是,它正在优化它们的加载方式,这会对您网站的感知加载时间产生相同的影响。

    它还可以帮助处理Google PageSpeed Insights/Lighthouse中的“避免链接关键请求”消息。

    通过推迟对某些文件的请求或异步加载它们,您可以防止某些不重要的资源“阻塞”快速加载站点可见部分所需的资源。

    有关为什么会发生这种情况的更多信息,您可以阅读我们关于理解网页关键渲染路径的指南。

    然后,您可以按照我们的详细指南来消除WordPress上的渲染阻塞资源

    减少HTTP请求的最佳WordPress插件

    如果您正在寻找一些“一体式”WordPress插件来减少HTTP请求,我们推荐上面教程中的两个插件:

    虽然您仍然需要手动评估您的主题和插件以查看它们是否发出了过多的HTTP请求,但这两个插件都可以帮助您在完成清理后优化网站上剩余的所有内容。

    小结

    您站点上的每个单独资源都会添加一个HTTP请求。一张图片是一个HTTP请求,一个CSS样式表是一个HTTP请求,一个字体文件是一个HTTP请求,依此类推。

    如果您使用WordPress,您的主题肯定会添加自己的HTTP请求,许多插件也会添加自己的HTTP请求。您还将收到来自您使用的任何图像和您添加的第三方脚本(例如分析工具)的HTTP请求。

    更多和/或更大的HTTP请求将导致网站速度变慢。这就是为什么当您使用GTmetrix或PageSpeed Insights等速度测试工具时,您通常会看到“减少HTTP请求”或“优化HTTP请求”或“避免链接关键请求”之类的消息。

    要减少您网站上的HTTP请求数量,您可以按照我们上面详述的步骤进行操作。

  • 在WordPress网站服务器托管Web字体的深入指南

    在WordPress网站服务器托管Web字体的深入指南

    在您的WordPress网站上托管和使用字体时,有很多不同的选择。您可以在本地托管它们,也可以使用Google字体(现在大多数主题都集成了Google字体),或使用其他3rd方服务,如Adob​​e Fonts。

    今天,我们想深入探讨在WordPress中托管本地字体具有优势的几个原因。您不仅可以有更多的HTML字体选择,而且有时也有性能优势。查看我们下面的深入教程,了解如何在本地托管您的高级字体以及来自Google字体的任何字体系列。

    什么是Web字体?

    当您浏览某人的WordPress网站时,您会看到两种基本字体,Web安全字体或Web字体。或者他们也可以混合使用两者。

    建议阅读:如何在WordPress中更改字体

    • Web安全字体是预装在设备或操作系统上的字体。Web安全字体的一些示例包括Arial、Times New Roman和Courier New以及通用字体系列,如serif、sans-serif(请参阅现代字体)和等宽字体。这些是您已经看到多年的字体。查看Web安全字体的完整列表
    • Web 字体是未预装在设备上的字体,必须由用户的浏览器下载才能显示。Web 字体的一些示例包括 Google 的 Open Sans 和 Roboto 字体,以及来自 Adob​​e Fonts 的流行的 Proxima Nova 字体。

    Google Fonts是一个开源字体目录,在过去几年中得到了广泛使用。根据BuiltWith的数据,在排名前10,000的网站中,超过45%的网站在其网站上使用Google字体。如果我们查看Google Fonts分析,我们可以看到它们的浏览量超过17千万次。这是很多!Open Sans和Roboto是他们使用最广泛的两个字体系列,Roboto 在过去一年中增长了77%。我们有一篇关于最佳Google字体的文章,请务必查看:  15 种最佳Google 字体(按数字排序)

    谷歌字体统计

    谷歌字体统计

    本地托管字体与第3方

    在我们深入学习本教程之前,重要的是要了解托管本地字体和简单地使用3rd方服务之间的一些优缺点。在本地托管字体意味着您实际上在自己的服务器上拥有字体文件(和/或复制到您的CDN,您也将其用于所有其他资产)。而如果您使用第三方(例如Google Fonts或Adob​​e Fonts),则只需通过链接到外部资产来包含字体。

    本地字体的优势

    1. 更广泛的字体选择

    使用本地字体的一个巨大优势是您可以选择更广泛的字体!虽然Google Fonts和Adob​​e Fonts等3rd方服务拥有庞大的库,但它们无法与高级字体商店相比,您可以在其中购买所需的任何高级网络字体并将其托管在您的网站上。我们实际上将在下面的教程中使用高级字体,您无法从任何3rd方服务中获得。

    2. 可以更好地整合

    由于字体选择范围更广,在本地托管它们可能会让您选择一种与您的品牌更好地集成的字体,以保持整个网站的一致性。这一切都取决于您的设计需求和偏好。

    3. 不必依赖第三方服务

    当您在本地托管字体时,您不必依赖3rd方服务或其服务器。众所周知,诸如Adob​​e Fonts(以前称为Typekit)之类的服务会出现故障,这反过来又会让您看起来很糟糕。对WordPress网站的依赖越少越好。

    4. 完全控制缓存

    通过使用本地字体,您可以完全控制字体文件的缓存。如果您使用Google字体或其他3rd方服务,您可能会看到错误或警告,指出资源缺少缓存验证器或它们需要expires headers。这些是在服务器级别修复的,当它们在3rd方服务器上时,您无法控制修复它们。

    指定缓存验证器

    指定缓存验证器

    5. 更少的请求等于更快的加载时间

    由于必须从第3方下载Web字体,这反过来可能会影响您网站的加载速度。您永远不知道他们的服务器在特定时刻的运行速度。但是,您确实可以通过WordPress主机对此进行更多控制,或者您应该这样做!例如,Adobe Fonts添加了2个外部HTTP请求,并且它还对所有字体格式进行了base64编码。如果您不熟悉字体,则不再需要提供所有字体格式,您只需要WOFF和WOFF2(如果您要进行额外压缩)。

    使用Google Fonts,您还有一个额外的DNS请求来查找fonts.googleapis.com以获取CSS文件。然后,您可以向fonts.gstatic.com发出其他请求以下载字体文件。当您在本地托管所有请求时,所有请求都来自同一个域,并且很可能您不需要另一个CSS文件,因为它将在您的WordPress主题的CSS文件中。

    Google字体HTTP请求

    Google字体HTTP请求

    6. 单个HTTP/2连接

    如果您还没有了解HTTP/2的优势,我们强烈建议您这样做。通过在本地或CDN上托管您的字体,您可以利用单个HTTP/2连接来实现更好的并行性和多路复用。

    本地字体的缺点

    现在我们已经了解了本地字体的优点,但也有一些缺点需要注意。

    1. 谷歌字体可能已经被缓存

    Google Fonts使用自己的CDN,速度很快,毕竟是Google。由于如此多的网站已经在使用Google字体,因此用户很可能已经在浏览器的缓存中拥有该字体。如果您使用更独特、更优质的字体,它实际上可能会增加下载时间。例如,如果有人访问使用Google Fonts中的Roboto字体的网站,它将下载到他们的缓存中。如果他们随后访问您的网站,该网站也使用Roboto,则无需再次下载该字体。但是,如果您使用的是新发布的高级字体,例如Proxima Soft,则很可能需要下载,这可能会增加加载时间。

    这里的关键要点是,如果您打算使用一种未广泛使用的高级字体,您可能应该指望该人的浏览器在他们第一次访问您的网站时需要下载它。注意:如果您使用流行的Google字体并将其托管在本地,例如Roboto,则这不适用,因为浏览器足够智能,可以在缓存中检测到它(无论是从Google加载还是从您的站点本地加载)。

    2. 更复杂

    我们意识到并不是每个人都是WordPress大师。托管本地字体肯定需要更多的设置。例如,WordPress主题可能会在其主题中自动调用Google字体,如果您在本地托管字体,则需要找到一种方法来禁止在您的站点上调用它们。这可能需要与您的主题开发人员联系以获得快速的代码行。这听起来可能很复杂,但我们将尝试在下面的教程中尽可能简单地解释它。

    3. 更谨慎的字体选择

    当您托管本地字体时,您必须选择要支持的字体类型。如果您只选择较新的格式,例如WOFF2,您可能会忽略较旧的浏览器,而这些浏览器将默认使用旧的网络安全字体。例如,根据CanIUse的说法,IE11、Safari和某些版本的Android浏览器可能会在仅使用WOFF2网络字体时出现问题。因此,您可能希望使用WOFF+WOFF 2以确保全面安全。WOFF 2提供了更高的压缩方法,这就是您想要同时使用两者的原因。

    WOFF2浏览器支持

    WOFF2浏览器支持

    使用 3rd 方服务时,几乎不可能把它搞砸,因为它们考虑了开箱即用的广泛浏览器支持。因此,在本地托管时,您必须更加小心您的字体类型选择

    4. 不要没有CDN

    如今,许多站点都在使用Cloudflare或KeyCDN等CDN来加速其资产的交付。这很重要,因为它可以全面减少延迟和DNS查找时间。如果您使用本地字体,而不使用CDN,实际上,与使用Google Fonts或Adob​​e Fonts等服务相比,您的网站速度可能会变慢。原因是所有这些服务都使用CDN来提供它们的字体。所以我们强烈建议,除非您只有一个小地理区域的流量,否则如果您托管自己的字体,请始终使用CDN。当然,请确保您使用的是支持HTTP/2的CDN提供商

    如何在WordPress中托管本地字体

    现在是时候进行有趣的部分了!在WordPress中托管您的本地字体。我们在下面进行了两种不同的选择,一种是使用我们购买的高级字体,第二种实际上是使用 Google 字体并将其托管在本地。在本教程中,我们使用全新的WordPress安装并安装了2017主题。

    1. 如何在本地托管高级字体

    为了在本地托管高级字体,我们选择使用Fontspring和2017年1月发布的新Proxima Soft字体。由Mark Simonson创建的Proxima Nova Soft是原始Proxima Nova字体的更新版本。我们选择Fontspring是因为它们不需要任何3rd方跟踪脚本,而且该字体是一次性购买的,可以在无限数量的网站上使用。购买字体时要非常小心,因为其中很多需要3rd方跟踪脚本,这在某种程度上违背了在本地托管它们的目的。

    Fontspring

    Fontspring

    我们购买了Proxima Soft Regular和Proxima Soft Bold字体。通常,对于大多数网站来说,常规字体类型和粗体就足够了。根据您的站点,您可能还需要斜体和半粗体。

    步骤1

    购买字体后,您将收到一封电子邮件,其中包含字体文件的链接。

    Proxima Soft字体下载

    Proxima Soft字体下载

    步骤2

    每个字体版本,例如粗体和正则都有自己的字体类型,例如WOFF2、WOFF、TTF等。在这个例子中,我们将只使用粗体和粗体正则的WOFF和WOFF2版本,这确保全面的现代浏览器支持。

    本地字体文件

    本地字体文件

    步骤3

    我们获取字体文件并通过FTP将它们上传到我们的WordPress站点到我们创建的名为“fonts”的文件夹中。在此示例中,我们将CDN用于我们的所有资产,以及来自KeyCDN团队的免费CDN Enabler插件。这个插件会自动复制我们刚刚上传到CDN的字体。即使我们说在本地托管它们,CDN仍在引用您的本地资产。重要的部分是您从同一位置提供所有资产,而不是引用多个域(主机)。

    将字体上传到网络服务器

    将字体上传到网络服务器

    步骤4

    您需要在WordPress网站上的CSS中引用新字体。现在很多主题都有自定义CSS面板,或者您可以使用像Simple Custom CSS and JS这样的免费插件。我们将插入以下代码,引用我们的CDN URL。

    @font-face {
    font-family: ‘proxima_softregular’;
    src: url(‘https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff2’) format(‘woff2’),
    url(‘https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff’) format(‘woff’);
    font-weight: normal;
    font-style: normal;
    }
    @font-face {
    font-family: ‘proxima_softbold’;
    src: url(‘https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff2’) format(‘woff2’),
    url(‘https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff’) format(‘woff’);
    font-weight: normal;
    font-style: normal;
    }
    @font-face {
    font-family: ‘proxima_softregular’;
    src: url(‘https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff2’) format(‘woff2’),
    url(‘https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff’) format(‘woff’);
    font-weight: normal;
    font-style: normal;
    }
    @font-face {
    font-family: ‘proxima_softbold’;
    src: url(‘https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff2’) format(‘woff2’),
    url(‘https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff’) format(‘woff’);
    font-weight: normal;
    font-style: normal;
    }
    @font-face {
    font-family: 'proxima_softregular';
    src: url('https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff2') format('woff2'),
    url('https://cdn.wpdev.ink/fonts/proximasoft-regular-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
    }
    @font-face {
    font-family: 'proxima_softbold';
    src: url('https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff2') format('woff2'),
    url('https://cdn.wpdev.ink/fonts/proximasoft-bold-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
    }

    您还需要更新样式以指向新的字体系列。这是我们在2017主题中使用的代码示例。

    body {font-family: ‘proxima_softregular’, Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:‘proxima_softbold’, Arial, sans-serif;}
    body {font-family: ‘proxima_softregular’, Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:’proxima_softbold’, Arial, sans-serif;}
    body {font-family: 'proxima_softregular', Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:'proxima_softbold', Arial, sans-serif;}

    这是来自Simple Custom CSS and JS插件的屏幕截图。

    自定义字体CSS代码

    自定义字体CSS代码

    步骤5

    如果您的WordPress主题已经集成了Google字体,您需要确保禁用它们。否则,您可能会同时加载本地字体和Google字体。由于我们在本教程中使用了2017主题,因此我们使用免费的Disable Google Fonts插件。这仅适用于WordPress中的默认主题。对于大多数主题,您可能需要联系开发人员,他们可以快速提供禁用 Google字体的功能。或者检查他们的文档,通常这是一个非常快速的调整。某些主题甚至可以选择在后端打开或关闭它们。

    就是这样!这是我们的新Proxima Soft字体加载的屏幕截图,用于我们的正文字体和2017主题的标题。

    wordpress网站上的新字体

    wordpress网站上的新字体

    这是我们的HTTP请求的屏幕截图。如您所见,我们只有2个对WOFF2字体的请求,而不是我们之前显示的Google的4个请求。我们在网站上也有WOFF字体,但由于Chrome支持WOFF2,所以改为拉取这些字体。例如,如果我们使用IE 11访问该站点,则会加载WOFF字体。

    本地托管字体的HTTP请求

    本地托管字体的HTTP请求

    2. 如何在本地托管Google字体

    在本地托管字体的第二种方法是实际使用您在Google Fonts上已经喜欢的字体,然后将其移动到您的服务器或CDN。众所周知,Open Sans非常轻巧且速度超快。所以我们将在我们的例子中使用它。

    步骤1

    获取Google字体的最佳方法是使用免费的google-webfonts-helper工具,我们将在本教程中使用该工具。您可能还想查看Font Face Observer项目。您需要做的第一件事是搜索您想要的Google字体,然后选择样式。我们再次选择常规和粗体 (700) 字体样式。

    下载Open Sans网络字体

    下载Open Sans网络字体

    步骤2

    然后你需要选择你想要的浏览器支持。现代浏览器会给你WOFF和WOFF2字体,这正是我们想要的。最好的支持为您提供WOFF、WOFF2、EOT、TTF和SVG。如您所见,它为您提供了可以复制到剪贴板的代码,以及包含字体的下载zip。

    现代浏览器中字体的CSS

    现代浏览器中字体的CSS

    其余的说明与我们上面的高级字体示例非常相似。

    步骤3

    我们获取字体文件并通过FTP将它们上传到我们的WordPress站点到我们创建的名为“fonts”的文件夹中。在此示例中,我们将CDN用于我们的所有资产,以及来自KeyCDN团队的免费CDN Enabler插件。这个插件会自动复制我们刚刚上传到CDN的字体。即使我们说在本地托管它们,CDN仍在引用您的本地资源。重要的部分是您从同一位置提供所有资源,而不是引用多个域(主机)。

    将Google字体上传到网络服务器

    将Google字体上传到网络服务器

    步骤4

    您需要在WordPress网站上的CSS中引用新字体。现在很多主题都有自定义CSS面板,或者您可以使用像Simple Custom CSS and JS这样的免费插件。我们将插入以下代码,引用我们的CDN URL。

    /* open-sans-regular – latin */
    @font-face {
    font-family: ‘Open Sans’;
    font-style: normal;
    font-weight: 400;
    src: local(‘Open Sans’), local(‘OpenSans’),
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff2’) format(‘woff2’), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff’) format(‘woff’); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }
    /* open-sans-700 – latin */
    @font-face {
    font-family: ‘Open Sans’;
    font-style: normal;
    font-weight: 700;
    src: local(‘Open Sans Bold’), local(‘OpenSans-Bold’),
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff2’) format(‘woff2’), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff’) format(‘woff’); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }
    /* open-sans-regular – latin */
    @font-face {
    font-family: ‘Open Sans’;
    font-style: normal;
    font-weight: 400;
    src: local(‘Open Sans’), local(‘OpenSans’),
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff2’) format(‘woff2’), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff’) format(‘woff’); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }
    /* open-sans-700 – latin */
    @font-face {
    font-family: ‘Open Sans’;
    font-style: normal;
    font-weight: 700;
    src: local(‘Open Sans Bold’), local(‘OpenSans-Bold’),
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff2’) format(‘woff2’), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url(‘https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff’) format(‘woff’); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }
    /* open-sans-regular - latin */
    @font-face {
    font-family: 'Open Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Open Sans'), local('OpenSans'),
    url('https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url('https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }
    /* open-sans-700 - latin */
    @font-face {
    font-family: 'Open Sans';
    font-style: normal;
    font-weight: 700;
    src: local('Open Sans Bold'), local('OpenSans-Bold'),
    url('https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
    url('https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
    }

    您还需要更新样式以指向新的字体系列。这是我们在2017主题中使用的代码示例。

    body {font-family: ‘Open Sans’, Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:‘Open Sans’, Arial, sans-serif;}
    body {font-family: ‘Open Sans’, Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:’Open Sans’, Arial, sans-serif;}
    body {font-family: 'Open Sans', Arial, sans-serif;}
    h1,h2,h3,h4,h5,h6 {font-family:'Open Sans', Arial, sans-serif;}

    这是来自Simple Custom CSS and JS插件的屏幕截图。

    本地托管的Open Sans字体的CSS

    本地托管的Open Sans字体的CSS

    步骤5

    如果您的WordPress主题已经集成了Google字体,您需要确保禁用它们。这似乎有点讽刺,因为我们使用的是Google字体。但您需要这样做的原因是禁用外部请求。由于我们在本教程中使用了2017主题,因此我们使用免费的Disable Google Fonts插件。这仅适用于WordPress中的默认主题。对于大多数主题,您可能需要联系开发人员,他们可以快速提供禁用 Google 字体的功能。或者检查他们的文档,通常这是一个非常快速的调整。某些主题甚至可以选择在后端打开或关闭它们。

    就是这样!这是我们为2017主题的正文字体和标题加载的新Google Open Sans字体的屏幕截图。

    本地托管的Open Sans字体示例

    本地托管的Open Sans字体示例

    这是我们请求的屏幕截图。如您所见,我们只有2个对WOFF2字体的请求,而不是我们之前显示的Google的4个请求。我们在网站上也有WOFF字体,但由 Chrome支持WOFF2,所以改为拉取这些字体。例如,如果我们使用IE 11访问该站点,则会加载WOFF字体。

    打开Sans HTTP请求

    打开Sans HTTP请求

    小结

    就是这样!您现在知道如何从高级字体商店托管本地字体或将Google字体移动到您自己的服务器和/或CDN。所以现在你可以去看看那里所有漂亮的字体,而不必担心它们如何影响性能。他们可能只是为您的WordPress网站改头换面(请务必阅读我们关于WordPress字体的深入指南)!另一个很好的选择是系统字体

  • 什么是谷歌缓存(Google Cache)?

    什么是谷歌缓存(Google Cache)?-1

    Google的网络爬虫不断在互联网上搜索新的和更新的网页。

    当这些爬虫为站点的内容编制索引时,它们不仅仅使用该信息来提供搜索结果。他们备份页面并将它们添加到名为 Google Cache 的统一数据库中。

    您可能已经使用 Google 缓存查看已关闭或​​未正确加载的旧版本网站。但是您知道您也可以使用它来解决您网站上的问题吗?它甚至可以帮助您进行SEO工作。

    本文介绍了Google Cache及其检查方法。我们还将了解Google缓存如何提供帮助 – 以及何时不应过分依赖它。

    1. 什么是谷歌缓存?
    2. 为什么Google缓存很重要
    3. 如何查看Google缓存
    4. 使用Google缓存的原因
    5. Google缓存的限制
    6. 为什么找不到缓存的网页?
    7. 如何解决网站缓存页面的问题
    8. 如何从Google缓存中删除页面

    什么是谷歌缓存?

    Google缓存页面是在Google抓取过程中获取的页面内容的原始HTML备份。谷歌缓存作为一个整体由这些备份页面组成。

    如果您查看网站的缓存版本,它可能看起来很像该网站在被抓取时的样子。但有几个原因有时会出现与您预期不同的情况。

    两个主要原因是:

    • 网页由您的浏览器呈现,而不是由 Google呈现。这可能会导致与网站的当前版本存在差异。
    • JavaScript不会保存到缓存中,因此您网站的某些部分可能会丢失。

    在缓存页面的顶部,您会看到一个横幅,显示三件事:

    1. 缓存页面的URL — 这通常是您要访问的URL。在某些情况下,例如重定向的URL,它会有所不同。
    2. 缓存此版本页面的日期– 您可以查看您正在查看的缓存页面是昨天还是上周创建的。这不一定是最后一次抓取您的网页;我们稍后会讲到。
    3. 版本— 您可以选择查看完整版本、纯文本版本或页面来源。完整版向您显示浏览器呈现的页面。纯文本版本已关闭CSS且不显示图像,但您仍会看到超链接。单击查看源代码会显示页面的源代码:

    闪电博主页谷歌缓存

    闪电博主页的缓存版本示例

    为什么Google缓存很重要

    Google Cache的主要用途是供人们浏览互联网。它允许他们查看已关闭或加载有问题的网页。

    作为网站所有者,Google缓存至关重要还有其他原因。您希望您的网站永远不会关闭或出现故障,但它确实发生了。拥有缓存可使用户可以使用您的内容,即使某些内容无法正常工作。

    您还可以使用您网站的缓存版本来了解您的网站是如何编入索引的并诊断问题。请继续阅读以了解更多信息。

    如何查看Google缓存

    您如何从Google搜索引擎结果访问缓存的Google页面取决于您使用的设备类型。在桌面Web浏览器中,您有两个选择:

    1. 您可以点击指向Google搜索结果中页面缓存版本的链接。
    2. 可以直接进入页面。

    在移动浏览器上,您只能选择使用直接URL。

    从Google搜索结果查看缓存页面

    即使您有从搜索结果页面查看缓存站点的经验,您也可能希望阅读本文,因为Google在2021年初改变了查找缓存链接的方式。

    首先,在Google上搜索您要查看的页面。在搜索结果中页面的URL旁边,您应该会看到一个下拉的三角图标。单击它们,会出现一个标有“页库存档”的弹出窗口:

     

    如何查看链接谷歌缓存

     

    Google 的“页库存档”功能

     

    此功能目前处于测试阶段。它旨在让您在单击之前了解有关站点的更多信息(例如它是否安全)。

    在某些情况下,您可能看不到页库存档按钮。这可能意味着页面没有被缓存;我们稍后会讨论这意味着什么。

    但是,如果您使用的是移动设备,则不会看到任何页面的按钮。在这种情况下,请继续阅读以了解查看缓存页面的其他方法。

    修改URL查看缓存页面

    对于这种方法,您必须知道要查看的页面的URL。只需进入cache:website.xyz搜索栏。

    例如,cache:www.wbolt.com将带您直接访问我们缓存的主页。

    查看谷歌缓存的其他工具

    您不需要任何特殊工具来查看缓存页面;谷歌本身就让它变得非常容易。但是有一些工具具有您可能喜欢的功能。

    Chrome的Web缓存查看器扩展程序允许您右键单击任何链接以查看页面的Google缓存版本和Wayback Machine Web存档版本

    来自Small SEO Tools的Google Cache Checker可让您一次查看最多五个页面缓存的URL和日期:

     

    google cache checker

    谷歌缓存检查器

     

    使用Google缓存查看页面的旧版本

    您的页面说它是昨天缓存的,但您想查看上周的版本。谷歌缓存可以吗?

    抱歉不行。

    Google只能向您显示缓存页面的一个版本。要查看以前的网站版本,您可以使用Wayback Machine之类的工具,这是过去网页版本的存档。

    看看我们以前的样子!

     

    2016年闪电博主页

    Wayback Machine上的2016 闪电博网站。

     

    使用Google缓存的原因

    事实是,还有其他工具可用于完成以下所有工作——在许多情况下,是更复杂的工具

    但是Google缓存因其快速且易于检查而难以匹敌。这使其成为监视网页某些方面的一种有价值的方式。

    作为网站所有者,您可以通过以下五种方式使用Google缓存。

    1.检查重复内容

    有时,您单击缓存的链接并进入与您预期不同的页面。

    发生这种情况的原因之一是重复的内容。当Google看到两个高度相似的页面时,它可能会决定不在索引中将它们分开。这导致只有一个被保存在缓存中。

    Google 在同一链接下缓存多个页面可以提醒您您的网站上有重复的内容。重复的内容不仅会造成令人困惑的缓存情况——它对SEO不利

    请借此机会检查这两个页面并找到区分它们的方法。

    2. 验证Google是否遵循您的规范标签

    也许您网站上的重复内容是有意为之,但您已添加rel=canonical标签来告诉Google抓取哪个版本。

    检查您不想抓取的页面之一的Google缓存版本。您应该被带到规范页面的缓存。

    3. 确保您的营销工作已被抓取

    您已经加大了SEO或内容制作的力度,并且希望确保Google正在将这些更改编入索引。

    快速查看页面的缓存版本可以告诉您它已被抓取。

    请注意,如果您的更改未出现在缓存页面上,则它们可能仍被编入索引。如果您担心,可以前往Google Search Console的URL Inspector进行确认。但是,如果您在缓存中看到您的更新,您就知道它们已被编入索引,并将开始影响您的搜索结果排名。

    4. 密切关注竞争对手网站的变化

    当竞争对手突然占据您的位置时,您会关心自己的事情,享受您在关键关键字的搜索结果顶部的位置。他们做了什么才能到达那里?您可以使用Google缓存来查找。将他们的缓存页面与当前版本进行比较——您将能够看到竞争对手最近所做的更改。

    5. 检索您网站的最新版本

    您应该始终备份您的网站,以防万一。也就是说,有时最坏的情况会发生,即使是最有准备的人。

    虽然您网站的Google缓存版本不会取代完整备份,但它有时确实可以让您在灾难发生之前查看页面的外观。您可以使用它来检索丢失的旧内容或代码。

    Google缓存的限制

    谷歌的缓存可以提供有用的信息,如果有什么东西看起来很奇怪,它可能值得调查。但谷歌缓存有一些已知的限制。

    谷歌缓存不会告诉你你的页面最后一次抓取的时间

    让我们从最大的误解之一开始。

    很多人认为每次Googlebot抓取页面时都会更新缓存。关于这个主题的许多其他文章会告诉您使用缓存来查看您的页面被抓取的频率。

    这不是真的。

    我们知道,因为谷歌的约翰·穆勒 (John Mueller) 在帮助主题中亲自告诉我们,他说:

    一般来说,我们并不总是在每次抓取页面时更新缓存页面。特别是当页面没有显着变化时,我们可能会选择只保留 [原文如此] 上的旧日期。

    这是一个专业提示:如果您正在寻找有关Google抓取您网站的频率、原因以及使用哪些漫游器的信息,请忘记缓存。该数据位于Google Search Console上。您可以在侧边栏中的“设置”下找到抓取报告。

    但是,您只能在域级别查看此信息。Search Console不会告诉您每个页面的抓取频率。

    页面可能无法正确呈现

    幸运的是,在这方面已经取得了一些进展。Google的Web Rendering Service用于在Web上呈现实时页面,它曾经基于过时的Chrome版本。因此,最新的浏览器有时呈现缓存页面的方式与Google呈现的当前页面不同。

    自2019年以来,Google Web Rendering Service使用最新版本的Chrome。

    但是,如果您的Chrome版本较旧,或者您使用的是其他浏览器,则缓存页面可能无法正确呈现。

    另一个渲染问题与缺少资源有关。Google备份的代码可能会引用CSS或JavaScript等资源。如果这些资源不再存在或已更改,则页面将无法正确呈现。

    显示错误页面

    我们已经研究了重复的内容或不正确的规范标签如何导致Google缓存显示错误的页面。正如您可能想象的那样,这限制了查看特定网页缓存的用处。

    某些页面未缓存

    这可能会让人感到意外,但事实证明,许多页面根本没有被缓存。

    一个普遍的误解是,未缓存的网站意味着Google认为它不是必不可少的,但这不一定是真的。接下来,我们将查看页面可能不会被缓存的一些原因。

    为什么我找不到缓存的网页?

    并非所有被抓取的页面都被缓存。如果您的页面没有缓存版本,请不要惊慌!这并不意味着您的页面尚未编入索引。

     

    什么是谷歌缓存(Google Cache)?-1

    404错误表示页面没有缓存版本

     

    如果您担心它确实没有被编入索引,您可以使用Google Search Console的URL Inspector进行检查。

    为了证明索引页面并不总是被缓存,我们回到谷歌的约翰穆勒。在Twitter上,他回答了一位用户询问未缓存页面的问题:

    我们不会缓存我们索引的所有页面,所以这可能会发生。有时需要一段时间,有时我们根本不缓存它。

    当用户问他未缓存的网站是否总是低质量时,他说:

    它可以是各种奇怪的技术怪癖的页面。缓存有点独立,所以它不代表我们索引和排名的内容。

    换句话说,缓存页面不是排名因素。即使您的网页没有缓存版本,您也可以将其置于搜索结果的顶部。

    但是未缓存的页面仍然值得研究。您可以探索几种不同的可能性。

    您的页面是基于JavaScript的

    与其他网页相比,Google可以更轻松地为某些基于JavaScript的网页编制索引。但是许多JavaScript页面最终都没有缓存,甚至没有索引。

    这是因为大多数HTML直到JavaScript执行后才会加载。如果没有可索引的内容,Google将不会创建缓存页面。

    元标记阻止缓存

    在你的网页的HTML代码元标记noindex是指页面无法通过谷歌进行索引,另外noarchive也会阻止谷歌缓存阻止它。任何一个都将导致页面不被谷歌缓存。

    也许这正是你想要的。但是如果您没有意识到页面上有一个noindexornoarchive标记,删除它可以解决您的缓存丢失问题。

    该页面是重复的(或谷歌认为是)

    如果Google确定您的两个页面是重复的,请想办法使它们独一无二。考虑每个页面的不同搜索意图。

    如何解决网站缓存页面的问题

    您的页面不必被缓存,但如果您想实现它,您可以做一些事情。

    将您的页面提交给Google

    如果您担心Google根本没有将您的网页编入索引,您可以查看Google Search Console。

    在Search Console顶部的 URL 检查搜索栏中输入页面的URL。如果是“URL is on Google”的结果,则该页面已被编入索引。如果该页面最近发生了变化,并且您认为Google未将新版本编入索引,则可以单击请求编入索引,请求Google对其重新编入索引。

    您可能还会得到“Page is not on Google”的结果。如果这样做,请向下滚动,您将能够看到有关该页面的一些详细信息。例如,您可以检查该页面是否允许抓取以及用户选择的规范是否与Google选择的规范相匹配。要请求索引,请单击请求索引

     

    什么是谷歌缓存(Google Cache)?-1

    Google Search Console-URL索引请求

    如果你希望您的网站页面URL可以主动提交至Google Search Console,请求编入索引,您可以安装搜索推送插件来实现。

     

    检查常见站点问题

    我们已经介绍了您的页面可能不会被缓存的几个原因,例如大量JavaScript和重复的内容。

    除此之外,鼓励频繁索引的最好办法就是创建一个高质量的站点。确保您已针对移动设备优化了您的网站,并且您的网站速度很高

    如果您的页面加载时间太慢,它甚至会减慢Google的漫游器速度,从而导致索引延迟。

    如何从Google缓存中删除页面

    我们认为Google缓存非常有用,但出于各种原因,您可能不希望将旧版本的网页存储在Google的服务器上。例如,您可能不希望停产产品的页面可用。

    防止页面缓存的一种方法是使用上面提到的noindexnoarchive标签。如果您想保留页面但从不希望它们被缓存,这些标签是理想的永久解决方案。

    您也可以直接要求Google从Google缓存中删除网址。要做到这一点,去谷歌搜索控制台,并单击侧边栏的删除。然后单击新要求。此时,您有两个选项:暂时删除网址清除缓存的网址

    临时删除意味着该网址在大约六个月内不会出现在Google搜索结果中。缓存也会消失。该页面将在再次上线时重新索引并重新缓存(如果您不希望发生这种情况,则必须添加元标记)。

    清除缓存的URL正是它听起来的样子。缓存会被移除,但是当网站被抓取时页面会被再次缓存。

    如果您希望更新页面的旧版本消失,这是一个很好的方法。您还可以通过在更改页面后提交用于索引的页面来推动Google更新页面的缓存。

    小结

    谷歌缓存并不是传闻中的一切。你不能用它来检查你的网站上次被抓取的时间——拥有它不会提高你的搜索引擎排名。有时,它存储的网站版本很奇怪、不完整或完全错误。

    但谷歌缓存对网站所有者有其用处。这是检查您的网站是如何编入索引的一种快速方法,它可以帮助您发现和诊断问题。您还可以使用Google Search Console来提高您的搜索引擎排名

  • 如何提升WordPress评论加载性能

    如何提升WordPress评论加载性能

    你有没有注意到你最受欢迎的博客文章——那些引发大量评论的文章——需要更长的时间才能加载?如果您的评论系统没有经过仔细配置,很高兴看到WordPress评论滚滚而来,但它确实会减慢您的网站速度。

    想想使评论起作用的资源:

    • 查询数据库以提取现有评论,
    • 为每个新评论创建数据库条目,
    • 评论和评论元数据由访问者的浏览器接收和处理,
    • 请求、下载和加载外部资源,例如Gravatar,以及
    • 在许多情况下,必须下载和处理大型JavaScript和jQuery资源,才能使评论系统按预期方式工作。

    结果,繁忙的评论部分会增加网络服务器的负载,增加页面的整体大小,增加所需的HTTP请求数量,并添加额外的JavaScript资源供浏览器应对。无论您是使用原生WordPress评论还是插入了第三方评论系统(如Disqus或Facebook评论),评论都会拖累您网站的速度,您应该优先考虑优化您的网站的性能网站的评论部分。顺便提一句。如果您在处理垃圾评论时遇到问题,请务必阅读我们关于如何阻止WordPress垃圾评论主题的详细指南。

    修复加载缓慢的评论的策略

    如果您发现评论部分正在减慢您最受欢迎的博客文章的加载速度,您可以做一些事情:

    • 完全禁用评论。这肯定会解决问题。但是,如果您的评论部分没有增加任何价值,您真的应该考虑它。如果您的评论部分太忙而使您的网站变慢,那么它可能会增加足够的价值,您不会想将其杀死。查看我们关于如何在WordPress中禁用评论的完整教程。
    • 优化原生WordPress评论。如果您使用的是原生WordPress评论系统,您可以采取一些措施来加快速度。
    • 使用第三方评论系统。如果您的网站托管在廉价且资源匮乏的共享服务器上,那么使用第三方评论系统可能会加快包含大量评论的页面的速度。
    • 延迟加载评论。无论您使用的是WordPress原生评论还是Disqus之类的第三方评论系统,都要找到一种延迟加载评论的方法,以免它们减慢初始页面渲染速度。

    让我们分别考虑每种策略,以便您找出最适合您网站的策略。

    优化原生WordPress评论

    您可以做两件事来加速已经加载了大量原生WordPress评论的网页:限制最初加载的评论数量并使用本地托管的头像。让我们依次看看每个选项。

    限制显示的评论数量

    默认情况下,WordPress设置为在初始页面加载时加载您的所有评论。但是,加载数十甚至数百条评论,每条评论都包括一个独特的头像,确实会扩大您的页面并创建大量额外的HTTP请求。

    您可以非常轻松地减少初始页面加载时加载的评论数量。

    • 转到WordPress管理区域中的设置 > 讨论
    • 查找其他评论设置部分。
    • 选中分页显示评论旁边的复选框,并为您希望在初始页面加载时显示的评论数量添加一个值。
    • 滚动到页面底部单击按钮保存更改

    WordPress管理后台中的评论设置

    WordPress管理后台中的评论设置

    完成这些步骤后,您指定的评论数量将在初始页面加载时显示。

    使用本地托管的头像或在您的CDN上

    WordPress内置了对Gravatar的支持。这意味着任何拥有Gravatar帐户的用户在使用原生WordPress评论系统对博客发表评论时,都会将他们的自定义图像添加为头像。这为评论部分添加了一个很好的个性化元素,但成本很高。加载WordPress评论时,每个唯一的Gravatar都需要一个HTTP请求。因此,如果一个页面加载了来自50个不同评论者的评论,则需要50个HTTP请求才能下载所有这些Gravatar。可以想象,这会对页面速度产生相当大的影响

    如果您认为Gravatar不值得添加HTTP请求,您可以有两种选择。首先,您可以通过转到设置>讨论,找到头像部分并取消选中头像显示框来完全禁用头像。

    如果您不想采取如此激烈的措施,另一种选择是切换到本地托管的头像。为此,请安装WP User Avatar插件。安装完成后,转到Avatars > Settings并选中复选框以Disable Gravatar and use only local avatars。如果您不喜欢WP User Avatar附带的默认头像,woorkup教程中有一张关于使用本地托管头像的干净神秘用户图片,您可以上传并用作默认头像。

    请记住,进行此更改后,所有评论都将使用默认头像显示,除非用户在您的网站上注册并上传自定义头像。

    您最后的选择是将您的Gravatars加载到您自己的CDN上

    使用第三方评论系统

    您可能出于多种原因对切换到第三方评论系统感兴趣。首先,需要考虑服务器负载。创建和加载评论是一个资源密集型过程。如果您的博客评论部分真的很忙,那么将该工作卸载到第三方评论系统将减轻您网站服务器的负载。

    此外,第三方系统提供比原生WordPress评论系统更好的用户体验。他们还可能鼓励更多访问者发表评论,因为已经拥有第三方系统帐户的访问者可以立即发表评论,而无需注册或向您的网站提供详细信息。

    在某些情况下,所有这些好处都会发挥作用。然而,这并不是普遍正确的。

    不是每个人都喜欢第三方评论系统,其他人担心在幕后收集的数据。此外,第三方评论系统比原生 WordPress 评论更快的想法在理论上听起来不错,但实际上事情通常不会这样发展。

    如果您决定使用第三方评论系统,那么这样做是因为您喜欢使用该特定系统的体验,并且因为您确信您的网站访问者会像您一样喜欢它。不要切换到第三方评论以获得可能比现实更理论的感知性能改进。如果您确实跳转到第三方系统,请务必考虑实施下一个策略:延迟加载。

    延迟加载评论

    无论您是使用原生WordPress评论还是第三方系统,延迟加载评论都是一种几乎可以肯定会加快页面加载时间的技术。延迟加载的评论系统会从初始页面渲染中删除,并在访问者到达页面中的某个点时由JavaScript加载,或者通过单击“查看评论”之类的按钮来加载。

    如果实现延迟加载听起来有点技术性,那是因为它是。谢天谢地,你不必弄清楚。您可以使用一些插件来延迟加载您选择的评论系统。

    延迟加载原生WordPress评论

    延迟加载评论的功能并未内置于WordPress核心中。但是,我们推荐的一个很棒的轻量级免费解决方案是Lazy Load for Comments插件

    WordPress插件-Lazy Load for Comments

    WordPress插件-Lazy Load for Comments

    该插件可从WordPress插件目录中获得。因此,您可以直接从WordPress管理区域安装它。这将通过延迟加载所有WordPress头像来减少HTTP请求的数量。配置非常简单。只需安装并在讨论设置下,有两个选项。默认情况下,它设置为“On Scroll”,这是大多数人可能更喜欢的。您还可以将其设置为“On Click”,这将创建一个按钮供访问者在评论加载之前单击。

    滚动或点击

    滚动或点击

    延迟加载本机评论的另一个选项是使用wpDiscuz插件。

    WordPress插件-wpDiscuz

    WordPress插件-wpDiscuz

    该插件可从WordPress插件目录中获得。因此,您可以直接从WordPress管理区域安装它。

    • 转到插件 > 安装插件
    • 搜索“wpDiscuz”,然后选择立即安装按钮。
    • 安装插件后,转到Comments > Settings
    • 向下滚动,直到看到显示Comments loading/pagination type的行,然后选择Lazy loading comments on scrolling单选按钮。
    • 接下来,转到设置 > 讨论
    • 在“其他评论设置”部分中,减少“分页显示评论”字样后面框中的数字。
    • 使用小于10的数字,然后保存更改。
    • 请注意不要选中此行旁边的复选框。如果选中此框,默认的WordPress评论分页将覆盖wpDiscuz实现的延迟加载功能。

    现在,当您访问任何评论超过10条的页面时,只会加载前10条评论。到达评论部分的底部后,其他评论将自动加载。

    延迟加载Disqus

    如果您确实使用Disqus,那么延迟加载Disqus评论非常重要。如果您不这样做,Disqus可能会成为您网站加载速度的真正障碍。但是,与原生WordPress评论相比,延迟加载Disqus评论实际上可以加快您的网站速度

    Disqus Conditional Load插件

    Disqus Conditional Load插件

    Disqus Conditional Load是一个免费插件,可用于在您的网站上延迟加载Disqus。如果您以前从未使用过Disqus,您首先需要注册一个帐户并将新站点添加到Disqus。设置Disqus站点后,通过转到插件> 安装插件,搜索“Disqus Conditional Load”并选择立即安装来安装Disqus Conditional Load 。

    安装完成后,转到Comments > Disqus并选择Upgrade以配置您的数据库以使用Disqus。在以下屏幕上,使用您的Disqus用户名和密码登录Disqus。在下一个屏幕中,选择几分钟前添加的Disqus站点,然后选择“Next按钮。完成最后一步后,Disqus将安装在您的网站上,并配置为在读者到达您博客的评论部分时延迟加载。

    除了延迟加载所有图像(头像)之外,如果您不使用它,它还可以让您禁用计数脚本。因此,您的WordPress网站上的JavaScript调用减少了一次。

    延迟加载Facebook评论

    上面提到的Disqus Conditional Load插件的同一开发者还创建了一个免费插件,用于在您的WordPress网站上延迟加载Facebook评论。Facebook的脚本以使网站陷入瘫痪而闻名,即使这些脚本是异步加载的。

    Lazy Facebook Comments插件

    Lazy Facebook Comments插件

    Lazy Facebook Comments是一个免费插件,您可以使用它来加载滚动评论或单击按钮。这可确保您仅在需要时加载Facebook脚本。您还可以调整评论数量、配色方案、语言、宽度、排序顺序等。

    小结

    评论是大多数博客的核心功能,但新兴的评论部分确实会降低您网站的加载速度。您可以通过优化原生WordPress评论和延迟加载评论以将其从初始页面加载中删除,从而加快评论和WordPress网站的速度。

  • 有损与无损压缩两种图片格式初学者指南

    有损与无损压缩两种图片格式初学者指南

    数字图像是网络的固有部分,没有媒体就很难创建任何内容。不起眼的静止图像是为您的写作提供额外背景的绝佳方式。

    但是,如果没有优化,图像的文件大小可能会很大。有损与无损压缩是一个常见的考虑因素,因为每个都可以减小图像的大小,尽管也需要考虑质量权衡。

    您几乎总是需要对图像应用一些压缩。这样可以将质量保持在您指定的可接受的水平,同时减小文件大小。选择正确的压缩级别将取决于您的最终目标和要求。

    在这篇文章中,我们将研究有损与无损压缩。在整个过程中,我们将讨论图像“成型”的过程、压缩是什么,以及优化图像的许多其他方面。

    1. 有损与无损之间的差异
    2. 数字图像的元素
    3. 网络图像优化的工作原理
    4. 有损压缩的优缺点
    5. 无损压缩的优缺点
    6. 如何在有损与无损之间进行选择
    7. 使用在线压缩服务来优化您的图像

    有损与无损之间的差异

    当涉及到任何数字图像压缩时,有几种不同的格式可供选择。有时这些会根据许多因素而有其他名称。但是,在核心级别,您会发现两种类型:

    • 有损压缩:这里的目的是为图像提供尽可能小的文件大小。因此,图像质量通常在优先级列表中处于低位。
    • 无损压缩:您仍然会发现使用这种压缩格式可以显着减小文件大小,但图像不会受到伪影和其他问题的影响。

    在大多数情况下,您决定使用哪种格式将归结为您的最终目标:您想要小文件,还是专注于保持质量?

    有损压缩将从图像中永久删除它认为不必要的数据。它使用许多不同的技术来实现这一点,从而产生更小的文件大小。

    无损压缩也会删除数据,但如果需要,它可以恢复原始数据。目标是保持高质量,同时减小文件大小。

    有几种方法可以实现这一点,但结果通常是相同的。要找到适合您需求的正确选项,让我们先退后一步,回顾一下图像和压缩的基本知识。

    数字图像的元素

    与软件和Web开发一样,通常有一个“堆栈”将图像从相机拍摄到Web。

    图像以“原始”数据开始(因此名称为RAW)。这类似于应用程序的代码:片段、行和值转换为带有颜色、图像占位符、动态元素等的背景。

    对于图像,RAW文件根据相机制造商、编辑软件、色彩空间算法等呈现略有不同的图像表示。从那里,您编辑图像并将其导出为多种文件格式之一(稍后将详细介绍):

    在Capture One中编辑RAW文件的示例

    在Capture One中编辑RAW文件的示例

    构成标准数字图像的几个不同元素:

    • 文件类型:不同类型将提供可能适合或不适合您的最终图像的质量。关键是为应用程序选择最合适的文件类型。
    • 分辨率:您经常会看到这表示为百万像素 (MP),但您也将使用每英寸像素 (PPI) 或每英寸点数 (DPI)。更高的分辨率提供更高的质量,但它们也会增加初始文件大小
    • 位深度:这个方面决定了图像中的颜色信息。低位深度只会渲染几种颜色,而高位深度可能会一次渲染数百万种颜色。一般来说,越高越好。
    • 尺寸:这是图像占用的物理空间。例如,1,000像素x500像素可以定义图像的总大小。
    • 颜色空间:这是一种确定颜色显示方式的算法。每个色彩空间的设置都不同,这通常取决于摄影师的偏好。

    这些元素结合起来提供不同质量的最终图像。例如,一张高分辨率、高位深度的大型JPEG照片将提供最高的质量和清晰度:

    高质量的图像

    高质量的图像

    相比之下,即使是大尺寸且能够显示多种颜色的图像,在低分辨率下也会显得很差:

    低质量的图像

    低质量的图像

    这种平衡是您在应用压缩之前开发核心图像的方式。但是,您用于图像的格式对最终质量有很大影响。

    网络图像优化的工作原理

    因为图像压缩在一般意义上是相同的,所以您可以将标准规则应用于优化网络图像的方式。

    我们在其他地方介绍了很多这些概念,但值得快速总结以供参考:

    • 使用72PPI分辨率,因为这是网络的标准。出于存档原因,您可以使用更高的PPI/DPI,但我们假设您正在发布到网络。
    • 将图像的“长边”设置为2048像素,因为这对于许多不同的应用程序来说是最佳的。
    • 如果可以选择,请使用8位颜色深度。
    • 在发布之前通过压缩和优化工具运行图像。

    这是一种简单的格式,可以为您提供一致的结果,尽管压缩和优化是我们将在本文其余部分进行扩展的内容。

    为此,让我们看看有损压缩与无损压缩的优缺点。

    图像压缩如何帮助您的Web图像

    一般而言,“压缩”将最小值和最大值压缩在一起。例如,压缩会提高音乐中的最低音量并降低最高音量。这使得平均电平对耳朵更响亮。

    对于图像,压缩更像是一个还原过程。这意味着更加强调从图像中删除数据以减小文件大小,同时保持尽可能高的质量。

    有许多不同的专有算法可以帮助减少图像文件的大小。在许多情况下,这些都是特定公司专有的。您会发现许多“有损”和“无损”压缩标准,每个都有独特的描述符:

    ShortPixel中的压缩选项

    ShortPixel中的压缩选项

    综上所述,应用图像压缩有很多好处,这些好处不是特定格式独有的:

    • 您可以保持较小的文件大小,从而提高您网站的性能。
    • 通过扩展,您站点的服务器将有更少的工作要做,从而影响性能。
    • 小文件大小有助于减少服务器排放。因此,您有助于为可持续和合乎道德的未来做出贡献。
    • 根据您选择的算法和压缩质量,您可以显示近乎完美和可比的质量。

    就像创建可共享的图像一样,使用各种压缩值,使用特定的公司以及选择正确的算法对于找到适合您的结果至关重要。

    有损压缩的优缺点

    有损压缩减少了图像的文件大小,几乎排除了所有其他方面。该算法的工作方式是永久删除数据。这可能和听起来一样具有破坏性。

    虽然我们不会过多地讨论具体细节,但要知道一些数据有损压缩删除在图像中是可见的。这个想法是以更轻的重量提供原始、高质量图像的最佳表示——这意味着一些数据不会被削减。

    一般来说,使用有损压缩有几个好处:

    行列,他们会通过WordPress内幕技巧获得我们的每周时事通讯!

    • 文件大小会很小——在某些情况下,小于10KB。
    • 尽管存在伪像,但在许多情况下,质量损失是可以接受的。

    这给我们带来了使用有损压缩的负面影响——图像质量会随着任何数量的压缩而降低:

    JPEG图像的压缩滑块

    JPEG图像的压缩滑块

    你会发现色带——颜色阴影没有以正确的方式呈现——并且在某些情况下会看到边缘清晰度的损失。颜色较少的图像会显示较少的这种情况,但仍然会出现清晰度的降低。

    此外,图像质量下降是压缩过程的永久特征。这意味着以后无法扭转这种影响。

    尽管有这些缺点,但有损压缩对于Web和您网站的性能来说还是非常出色的。微小的文件大小并不总是会产生颗粒状的图像,尽管您可以(当然)将事情推向极端:

    过度压缩图像的示例

    过度压缩图像的示例

    然而,有损并不是唯一的选择。无损压缩是注重质量的网站所有者的替代方案。

    无损压缩的优缺点

    无损压缩就像标签上所说的那样:它在不影响可见质量的情况下尽可能地压缩图像的文件大小。它通过删除图像元数据来做到这一点,这会占用不必要的空间:

    图像的元数据

    图像的元数据

    无损压缩算法还寻找重复的像素序列,然后编码一个快捷方式来显示它们。例如,以“命令行界面”为例。您通常会定义其首字母缩写词一次,然后使用“CLI”(或您选择的首字母缩写词)以闪电般的速度引用它

    无损压缩的工作方式相同,因为它的破坏性较小。虽然删除元数据是不可逆的,但一些压缩将是可逆的,使其成为适用于多种用途的灵活算法。

    使用无损压缩的优点在于保持质量:

    • 与所有其他算法相比,无损压缩在图像中保留了最高质量。
    • 无损对于存档目的来说非常棒。例如,摄影师可以平衡存储资源与保留最多数据的图像。
    • 无损是视觉艺术的首选压缩算法:摄影、平面设计、数字艺术等。将无损算法与适当的深度和分辨率相结合,几乎可以实现“一对一”的复制。

    然而,关于无损压缩对特定领域的服务程度,有一点需要注意:应用范围很小。这会降低其整体可用性。

    以下是要考虑的无损压缩的其他一些缺点:

    • 如果网站使用许多图像,则无损压缩可能不是显示它们的最佳选择。这是因为在大多数情况下,您会希望在这些类型的情况下重视较小的文件大小。
    • 尽管压缩减小了文件大小,但无损算法不会像有损那样改变图像数据。正因为如此,您可能只会看到尺寸略有减少,而不是极端的瘦身效果。

    接下来,我们将研究最快(并且可能是最好)的方法。

    如何在有损与无损之间进行选择

    至此,您了解有损压缩与无损压缩之间的区别。但是,您可能仍然不知道在您的网站上使用哪种算法最好。

    有两种情况需要考虑:

    1. 对于网络上的大多数用例,可以使用有损压缩。
    2. 如果您想展示摄影或摄影艺术,无损压缩会更好地为您服务。

    这些注意事项依赖于使用标准 Web 图像格式之一,例如JPEG、PNG或GIF。但是,您的压缩需求可能会因HEIC和WebP等更现代的格式而有所不同。

    我们甚至会说,除非您在网站上显示照片,否则有损压缩应该是您的默认选择。WordPress默认压缩图像,这足以说明有损压缩几乎适用于所有应用程序。

    使用在线压缩服务来优化您的图像

    在将图像显示在您的网站上之前,您可以通过多种方式压缩图像。例如,您可以选择在编辑阶段应用压缩。无论如何,这可能是从RAW格式转换的副产品。

    然而,一个流行的选择是许多在线服务之一。每一个都将提供一系列算法和示例性用户界面 (UI)。更重要的是,大多数都有一些免费服务,至少在您提交之前试用该应用程序。

    我们在关于图像优化的文章中介绍了一些选项,尽管这些是连接到应用程序编程接口 (API) 的特定于WordPress的插件。好消息是这些插件中的许多也提供了在线界面。例如,考虑ShortPixel

    ShortPixel接口

    ShortPixel接口

    在这里,您将图像拖到上传器上,然后等待应用程序压缩和处理它们。但是,您需要先选择算法,因为该过程将立即开始。

    选择很简单:两种形式的有损压缩(“有损”和“光泽”),以及无损选项。ShortPixel的界面很好地解释了每种算法之间的区别,您可以在几秒钟内下载图像。

    虽然两者都可以满足您的需求,但Imagify界面看起来比ShortPixel的更流畅、更专业。这里还有三个“压缩级别”——Normal、Aggressive和Ultra:

    Imagify界面

    Imagify界面

    这里的细微差别是Imagify从无损压缩开始,然后逐步发展为具有严重伪影的有损算法。但是,您在其他解决方案中找不到其他几个选项。

    对于初学者,您可以保持图像的EXIF数据完整,甚至在转换后调整它们的大小。这有时是无价的,特别是如果您想应用可能会删除EXIF数据或限制调整图像大小的方式的压缩级别。

    就像它的神话同名一样,Kraken可以处理您的图像并应用各种类型的压缩。大多数用户会选择有损或无损类型。

    Kraken界面

    Kraken界面

    但是,还有一个专家模式:

    Kraken专家模式选项

    Kraken专家模式选项

    这使您可以根据自己的需要调整压缩,以及其他选项。例如,您可以调整JPEG和PNG压缩级别,选择保留图像中的元数据,甚至使用色度子采样来进一步更改颜色。

    小结

    图片看起来像是您网站的一个简单方面:您获取一个文件,将其上传到 WordPress,然后添加一个图片块来显示它。

    但是,在为网络准备图像的过程中还有很多事情可能比您意识到的要多。您选择的压缩格式会影响文件大小、图像质量等。

    这篇文章研究了有损与无损压缩,并总结了你应该选择哪一个。尽管在质量与大小之间走钢丝,但有损压缩对于网络上的大多数用例来说都是完美的。摄影师或那些担心篡改图像质量的人会希望使用无损压缩,尽管在文件大小方面的好处较少。

  • 如何在WordPress中延迟JavaScript解析(4种方法)

    如何在WordPress中延迟JavaScript解析(4种方法)

    您是否通过性能测试工具运行您的WordPress网站,却遇到了延迟在WordPress中解析JavaScript的指令?

    实施此更改可以对您网站的页面加载时间产生积极影响,尤其是对于移动访问者。但是警告可能有点难以理解,这就是为什么我们要准确解释延迟解析JavaScript的含义以及如何在WordPress网站上实现此更改。

    以下是您将在本文中学到的内容:

    1. 在WordPress中延迟解析JavaScript意味着什么?
    2. 如何判断是否需要延迟解析JavaScript
    3. 延迟解析JavaScript的不同方法
    4. 如何在WordPress中延迟JavaScript解析(4种方法)

    如果您只想直接跳到教程,可以单击上面列表中的最后一个链接。

    在WordPress中延迟解析JavaScript意味着什么?

    如果您曾经通过Google PageSpeed Insights、GTmetrix或其他页面速度测试工具运行过您的WordPress网站,您可能会遇到过延迟解析JavaScript的建议。

    但是……这实际上是什么意思?为什么它是一个重要的性能考虑因素?

    基本上,当有人访问您的WordPress网站时,您网站的服务器会将您网站的HTML内容传送到该访问者的浏览器。

    然后访问者的浏览器从顶部开始,并通过代码呈现您的网站。如果在从上到下的移动过程中找到任何JavaScript,它将停止呈现页面的其余部分,直到它可以获取并解析JavaScript文件。

    它会对找到的每个脚本执行此操作,这可能会对您网站的页面加载时间产生负面影响,因为访问者需要在浏览器下载和解析所有JavaScript时盯着空白屏幕。

    如果您网站的核心功能不需要某个脚本(至少在初始页面加载时),您不希望它妨碍加载网站更重要的部分,这就是为什么这些页面速度测试工具总是告诉你推迟对JavaScript的解析。

    那么延迟解析JavaScript是什么意思呢?

    本质上,您的网站会告诉访问者的浏览器等待下载和/或解析JavaScript,直到网站的主要内容已经完成加载。此时,访问者已经可以看到您的页面并与之交互,因此下载和解析该JavaScript的等待时间不再具有如此负面的影响。

    通过加快内容的首屏加载时间,您可以让Google感到高兴,并为您的访问者创造更好、更快的体验。

    如何判断是否需要延迟解析JavaScript

    要测试您的WordPress站点是否需要延迟解析JavaScript,您可以通过GTmetrix运行您的站点。

    GTmetrix会给你打分,还会列出需要推迟的特定脚本:

    在GTmetrix中延迟解析JavaScript测试

    在GTmetrix中延迟解析JavaScript测试

    延迟解析JavaScript的不同方法

    有几种不同的方法可以延迟JavaScript的解析。首先,您可以将两个属性添加到脚本中:

    1. Async
    2. Defer

    这两个属性都允许访问者的浏览器在不暂停HTML解析的情况下下载JavaScript。但是,不同之处在于,虽然async不会暂停HTML解析以获取脚本(如默认行为那样),但它会暂停HTML解析器以在获取脚本后执行脚本。

    使用defer,访问者的浏览器在解析HTML时仍然会下载脚本,但他们会等待解析脚本,直到HTML解析完成。

    与Web一起成长的这张图表很好地解释了这种差异:

    图形解释异步与延迟

    图形解释异步与延迟

    Varvy的Patrick Sexton推荐的另一种选择是,仅在初始页面加载完成后才使用脚本调用外部JavaScript文件。这意味着在初始页面加载完成之前,访问者的浏览器不会下载或执行任何JavaScript。

    最后,您将看到的另一种方法是将JavaScript移动到页面底部。但是,这种方法并不是一个很好的解决方案,因为即使您的页面将很快可见,访问者的浏览器仍会将页面显示为正在加载,直到所有脚本完成。这可能会阻止一些访问者与您的页面进行交互,因为他们认为内容没有完全加载。

    如何在WordPress中延迟JavaScript解析(4 种方法)

    要在WordPress中延迟JavaScript的解析,您可以采取三种主要途径:

    • 插件——有一些很棒的免费和高级WordPress插件可以推迟JavaScript解析。我们将向您展示如何使用两个流行的插件来做到这一点。
    • Varvy方法——如果您精通技术,您可以直接编辑您网站的代码并使用Varvy的代码片段。
    • Functions.php文件——您可以将代码片段添加到子主题的functions.php文件中以自动延迟脚本。

    您可以单击上方直接跳转到您喜欢的方法或通读所有技术以找到最适合您的方法。

    1. 免费的异步JavaScript插件

    Async JavaScript是来自Frank Goossens的免费WordPress插件,他是流行的Autoptimize插件背后的同一个人。

    它为您提供了一种使用异步或延迟延迟解析JavaScript的简单方法。

    首先,您可以从WordPress.org安装并激活免费插件。然后,转到设置 →  Async JavaScript以配置插件。

    在顶部,您可以启用插件的功能并在异步和延迟之间进行选择。记住:

    • Async下载JavaScript,同时仍解析HTML ,但随后暂停HTML解析以执行 JavaScript。
    • Defer在仍然解析HTML的同时下载JavaScript并等待执行它,直到HTML解析完成。

    如何使用异步JavaScript插件

    如何使用异步JavaScript插件

    再往下,你还可以选择如何处理jQuery。许多主题和插件严重依赖jQuery,因此如果您尝试推迟解析jQuery脚本,您可能会破坏您网站的一些核心功能。最安全的方法是排除jQuery,但您可以尝试推迟它。只要确保彻底测试您的网站。

    再往下,您还可以手动包含或排除特定的脚本被延迟,包括一个很好的用户友好功能,让您可以定位在您的网站上活跃的特定主题或插件:

    异步JavaScript包含/排除规则

    异步JavaScript包含/排除规则

    2.使用WP Rocket插件

    除了一堆其他性能优化技术外,WP Rocket还可以帮助您在WP Rocket仪表盘的“File Optimization选项卡中延迟JavaScript的解析。在JavaScript Files部分中查找Load JavaScript deferred选项。

    与Async JavaScript插件一样,WP Rocket还允许您排除jQuery以避免网站内容出现问题:

    如何使用WP Rocket延迟解析JavaScript

    如何使用WP Rocket延迟解析JavaScript

    3. 使用Varvy推荐的方法(代码)

    早些时候,我们提到Varvy的Patrick Sexton建议使用一个代码片段,该代码片段会等待下载和执行JavaScript,直到您的网站完成初始页面加载。

    您可以通过调整Varvy提供的代码片段,然后将脚本添加到您的主题中,紧接在结束</body>标记之前来实现此方法。

    这是来自Varvy的代码:

    <script type=“text/javascript”>
    function downloadJSAtOnload() {
    var element = document.createElement(“script”);
    element.src = “defer.js”;
    document.body.appendChild(element);
    }
    if (window.addEventListener)
    window.addEventListener(“load”, downloadJSAtOnload, false);
    else if (window.attachEvent)
    window.attachEvent(“onload”, downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
    </script>
    <script type=”text/javascript”>
    function downloadJSAtOnload() {
    var element = document.createElement(“script”);
    element.src = “defer.js”;
    document.body.appendChild(element);
    }
    if (window.addEventListener)
    window.addEventListener(“load”, downloadJSAtOnload, false);
    else if (window.attachEvent)
    window.attachEvent(“onload”, downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
    </script>
    <script type="text/javascript">
    function downloadJSAtOnload() {
    var element = document.createElement("script");
    element.src = "defer.js";
    document.body.appendChild(element);
    }
    if (window.addEventListener)
    window.addEventListener("load", downloadJSAtOnload, false);
    else if (window.attachEvent)
    window.attachEvent("onload", downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
    </script>

    确保将“defer.js”替换为您要延迟的JavaScript文件的实际文件名/路径。然后,您可以使用wp_footer钩子通过子主题的functions.php文件注入代码。

    使用这种方法,您可以将Varvy的代码包装成这样:

    /**
    Defer parsing of JavaScript with code snippet from Varvy
    */
    add_action( ‘wp_footer’, ‘my_footer_scripts’ );
    function my_footer_scripts(){
    ?>
    REPLACE_WITH_VARVY_SCRIPT
    <?php
    }
    /**
    Defer parsing of JavaScript with code snippet from Varvy
    */
    add_action( ‘wp_footer’, ‘my_footer_scripts’ );
    function my_footer_scripts(){
    ?>
    REPLACE_WITH_VARVY_SCRIPT
    <?php
    }
    /**
    Defer parsing of JavaScript with code snippet from Varvy
    */
    add_action( 'wp_footer', 'my_footer_scripts' );
    function my_footer_scripts(){
    ?>
    REPLACE_WITH_VARVY_SCRIPT
    <?php
    }

    4.通过functions.php文件延迟JavaScript

    最后,您还可以通过将以下代码片段添加到您的functions.php文件中,将defer属性添加到您的JavaScript文件中,而无需插件:

    function defer_parsing_of_js( $url ) {
    if ( is_user_logged_in() ) return $url; //don’t break WP Admin
    if ( FALSE === strpos( $url, ‘.js’ ) ) return $url;
    if ( strpos( $url, ‘jquery.js’ ) ) return $url;
    return str_replace( ‘ src’, ‘ defer src’, $url );
    }
    add_filter( ‘script_loader_tag’, ‘defer_parsing_of_js’, 10 );
    function defer_parsing_of_js( $url ) {
    if ( is_user_logged_in() ) return $url; //don’t break WP Admin
    if ( FALSE === strpos( $url, ‘.js’ ) ) return $url;
    if ( strpos( $url, ‘jquery.js’ ) ) return $url;
    return str_replace( ‘ src’, ‘ defer src’, $url );
    }
    add_filter( ‘script_loader_tag’, ‘defer_parsing_of_js’, 10 );
    function defer_parsing_of_js( $url ) {
    if ( is_user_logged_in() ) return $url; //don't break WP Admin
    if ( FALSE === strpos( $url, '.js' ) ) return $url;
    if ( strpos( $url, 'jquery.js' ) ) return $url;
    return str_replace( ' src', ' defer src', $url );
    }
    add_filter( 'script_loader_tag', 'defer_parsing_of_js', 10 );

    本质上,这个片段告诉WordPress将defer属性添加到除jQuery之外的所有JavaScript文件。

    它既快速又简单,但它并没有像Async JavaScript插件提供的那样为您提供细粒度的控制。

    小结

    推迟WordPress网站上的JavaScript解析是一个重要的性能考虑因素。

    一旦您使用上述方法之一来延迟WordPress中的JavaScript解析,我们建议您做两件事:

    1. 测试您的网站以确保推迟某些脚本不会破坏首屏内容的关键。同样,这通常发生在jQuery中,这就是为什么很多工具允许您排除jQuery.js。但是,它也可能发生在其他脚本中。
    2. 再次通过GTmetrix运行您的站点,以确保您的站点延迟了尽可能多的脚本(如果排除jQuery,您可能无法获得完美的分数——但您的分数应该会更好)。
  • 分析WordPress网站上的第三方服务性能

    分析WordPress网站上的第三方服务性能

    许多优化文章都关注如何加快WordPress网站的速度,例如优化图像或迁移到更快的主机。虽然这些都很重要,但今天我们想与您讨论第三方性能的影响以及它如何影响您的WordPress网站。基本上,您从站点外部调用的任何内容都会产生加载时间后果。使这个问题更加严重的是,其中一些只是间歇性地缓慢,使得问题的识别更加困难。今天我们将探索识别和分析第三方服务和性能问题的方法。

    什么是第三方外部服务?

    第三方外部服务可以被认为是从您自己的服务器外部与您的WordPress站点通信的任何东西。以下是我们经常遇到的一些常见示例:

    • 社交媒体平台,如Twitter、Facebook和Instagram(小工具或转换像素)
    • 第三方广告网络,如Google Adsense、Media.net、BuySellAds、Amazon Associates
    • 网站分析,例如Google Analytics、Crazy Egg、Hotjar
    • A/B测试工具,例如Optimizely、VWO、Unbounce
    • WordPress评论系统,例如Disqus、Jetpack、Facebook评论
    • 备份和安全工具,例如 VaultPress、Sucuri、CodeGuard
    • SumoMe、HelloBar等社交分享工具
    • CDN网络,例如KeyCDN、Amazon CloudFront、CDN77和StackPath
    • 外部托管的Javascript

    外部服务如何导致问题

    外部服务通常会带来两个问题。一个是由纯粹的体积带来的,另一个是等到它们加载。

    • 如果您有很多外部服务,则需要加载所有这些服务,并在每次页面加载时等待来自它们的信息。您的呼叫越多,等待的时间越长,您自己的服务器上的负载就越高,您遇到第二个问题的机会就越大。
    • 在某些情况下,页面加载将等到您的站点和外部服务之间的数据传输完成。如果在标头中调用服务并且服务中断,您的页面将简单地拒绝加载。

    当然,可以做一些事情来加快速度,例如异步加载脚本,但我们稍后会介绍他。在大多数情况下,庞大的体积是调试3rd方性能问题时必须处理的最大问题之一。

    识别外部服务

    识别这些服务并不难。最简单的方法之一是打开网站速度测试工具,无论是PingdomGTmetrix、WebPageTest还是Chrome Devtools,并通过它运行您的网站。您应该会看到已加载的资源列表。将鼠标悬停在资源上,如果它在开头不包含您的域名,则它是您正在调用的外部服务或外部资产。

    您可以在下面看到缩小版的jQuery是从外部源 (https://ajax.googleapis.com) 加载的。

    外部服务——JavaScript

    外部服务——JavaScript

    如果您不知道外部服务的用途,您可以随时尝试浏览主域或在Google中搜索其名称,因为应该会出现相关的开发人员或公司。这是确定服务是否合法的好方法。正如您在下面看到的,搜索jQuery文件会导致一些知名公司(如jQuery和Google)描述托管此文件。所以你可能是安全的。

    jQuery外部脚本

    jQuery外部脚本

    分析持续的第三方性能问题

    如果您的网站总是很慢,那么您需要弄清楚是什么让它变慢了。如果您的网站有间歇性问题,那就有点困难了。让我们从持续缓慢开始。我们在这里假设您的网站由于外部服务而运行缓慢。虽然许多速度问题可能是由外部服务引起的,但还有大量其他问题,因此这可能无法解决您的问题。

    首先,您需要确定是否有任何服务需要很长时间才能加载,以及它如何影响您网站的性能。所以我们建立了一个测试站点,其中包含以下内容:

    • 2个AdSense广告
    • 脸书点赞框
    • Instagram小工具
    • Disqus评论
    • Facebook转化跟踪像素
    • 谷歌分析

    WordPress测试站点

    WordPress测试站点

    这将使我们能够一项一项地删除每项服务,并向您展示它们对您的整体网站负载的影响程度。我们还将分享一些加载它们的替代方法的策略。然后,您可以将相同的策略应用于您自己的WordPress网站。我们通过Pingdom运行测试站点,您可以看到的第一件事是“按域的内容大小”和“按域的请求”。如果您看到请求,而不是来自您的域名,则这些请求很可能是外部服务或外部资产。这是一个很好的起点。正如您在下面看到的,static.xx.fbcdn.net有37个请求,这不好!

    Pingdom外部服务——(速度测试)

    Pingdom外部服务——(速度测试

    站点加载时间也是1.94秒,这真的很糟糕,因为正如您在上面看到的,测试站点上没有任何内容。这是一个较小规模的测试,可帮助您更好地分析第三方性能。WordPress网站越大,问题就越大。但从根本上说,大多数问题都可以通过类似的方式解决。

    处理Google AdSense

    我们首先要解决的是Google Adsense。通常,当您运行速度测试时,您可以将鼠标悬停在每个条上,以查看加载过程的每个部分花费了多长时间。您应该寻找超长的条(与其他条相比)以及仅在特定条完成后才开始加载条的地方——这些是您的瓶颈。一旦您发现某个特定元素的加载时间过长或阻止其他资源加载,您就需要弄清楚它为何存在以及它来自何处。

    这可能有点困难,对服务的调用可以在您的主题中编码,也可以来自插件。但是,正如我们之前提到的,还有绝对数量的问题。如果我们查看下面来自pagead2.googlesyndication.comtpc.googlesyndication.com的请求,我们可以看到这些条相当短,这意味着它们不会造成那么大的延迟。不过,其中一些确实有更长的接收时间(绿色条),这是Web浏览器从服务器接收数据所需的时间。最大的问题是一旦将所有请求加在一起。

    我们喜欢将Google AdSense称为可变的3rd-party服务。这是因为每次加载页面时都会加载不同数量的请求和资产。这使得很难确定是什么导致了性能问题,因为每次运行速度测试都会有所不同。以下只是广告生成的一些第3方请求的片段。它们还生成重定向,它们有自己的延迟。

    Google AdSense外部请求

    Google AdSense外部请求

    您可能认为仅仅两个广告就产生如此多的请求是很疯狂的,但这就是它们的工作原理。

    选项 1 – 异步加载

    您的第一个选择是确保它们异步加载。async属性基本上告诉浏览器立即开始下载资源,而不会减慢HTML解析速度。一旦资源可用,HTML解析就会暂停,以便可以加载资源。默认情况下,从Google AdSense新生成的代码将具有此属性,但如果您的代码还有几年的历史,我们建议您检查它。

    <script async src=“//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”></script>
    <!– nogluten-top-right-page-300×250 —>
    <ins class=“adsbygoogle” style=“display: block;” data-ad-client=“ca-pub-xxxxxxxxxxx” data-ad-slot=“9805695044” data-ad-format=“auto”></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
    <script async src=”//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”></script>
    <!– nogluten-top-right-page-300×250 –>
    <ins class=”adsbygoogle” style=”display: block;” data-ad-client=”ca-pub-xxxxxxxxxxx” data-ad-slot=”9805695044″ data-ad-format=”auto”></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- nogluten-top-right-page-300x250 -->
    <ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-xxxxxxxxxxx" data-ad-slot="9805695044" data-ad-format="auto"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

    请务必查看我们关于消除渲染阻塞JavaScript和CSS的另一篇文章。这可以帮助您更好地了解脚本如何在您的WordPress网站上加载和运行。

    选项 2 – 删除它们

    您的另一个选择是完全删除Google AdSense。显然,对于一些依赖第三方广告收入的网站来说,这不是一个选择。但是我们已经看到电子商务网站在他们的网站上投放AdSense广告,只是想快速赚钱。您应该意识到这方面的性能问题。如果您销售产品或服务,则一个Google AdSense广告可能弊大于利,并损害您的主要收入来源。对于博客作者,您还可以查看联属网络广告与AdSense。很多时候,您可以从CDN加载联属网络广告,并且只会有一个请求。

    在此示例中,我们将删除广告,以向您展示仅两个小广告如何影响您的WordPress网站的整体性能。因此,我们在移除它们后进行了另一次速度测试,您可以看到我们的加载时间从1.94秒下降到909毫秒!我们的请求从185减少到138,我们的整体页面大小从2MB 减少到1.7MB。

    删除Google AdSense后(速度测试)

    删除Google AdSense后(速度测试

    那就对了!两个小广告为我们的整体加载时间增加了大约一秒钟。这就是为什么除非您的收入模式围绕第三方广告,否则不要将它们放在您的WordPress网站上。如果您的广告网络有问题,并且您有一个插件可以为您处理广告网络,那么禁用该插件很可能会解决该问题。如果它在主题中编码,则需要修改主题文件。如果您是开发人员,我们建议您执行以下两项操作。

    解决Facebook Like框

    接下来要看的是导致所有这些static.xx.fbcdn.netscontent.xx.fbcdn.net请求的Facebook类似框。我们可以看到这些条相当短,这意味着它们不会造成太多延迟。但是,一旦将它们全部加在一起,这就是问题所在。同样,这是一个绝对数量的问题。

    Facebook小部件请求

    Facebook小部件请求

    我们建议每位网站所有者远离Facebook点赞框!它不仅会向外部JavaScript生成大量请求,还会加载大量图像。这里有三个建议可以更好地处理这个问题。

    选项 1 – 异步加载

    要使用Facebook点赞框,您或开发人员必须将以下代码添加到您的WordPress站点的标题中。还有一些WordPress小工具也添加了该框。

    <script>(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js. id = id;
    js.src = “//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976”;
    fjs.parentNode.insertBefore(js, fjs);
    }(文档, ‘脚本’, ‘facebook-jssdk’));</script>
    <script>(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js. id = id;
    js.src = “//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976”;
    fjs.parentNode.insertBefore(js, fjs);
    }(文档, ‘脚本’, ‘facebook-jssdk’));</script>
    <script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js. id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(文档, '脚本', 'facebook-jssdk'));</script>

    上面代码的问题是它没有异步加载。async属性基本上告诉浏览器立即开始下载资源,而不会减慢HTML解析速度。一旦资源可用,HTML解析就会暂停,以便可以加载资源。我们不确定为什么Facebook没有将此属性添加到脚本中,但您可以在下面看到修改后的版本,它将异步加载它。

    <script>(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js. id = id; js.async=true; js.src = “//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976”;
    fjs.parentNode.insertBefore(js, fjs) ;
    }(document, ‘script’, ‘facebook-jssdk’));</script>
    <script>(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js. id = id; js.async=true; js.src = “//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976”;
    fjs.parentNode.insertBefore(js, fjs) ;
    }(document, ‘script’, ‘facebook-jssdk’));</script>
    <script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js. id = id; js.async=true; js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.9&appId=1697897870426976"; 
    fjs.parentNode.insertBefore(js, fjs) ; 
    }(document, 'script', 'facebook-jssdk'));</script>
    

    如果您在Pingdom中检查它,您可能不会注意到加载时间有太大差异,但您的访问者肯定会注意到,因为它会影响脚本和资产的加载方式/时间。

    选项 2 – 改用图片横幅

    下一个建议是用一个简单地链接到您的Facebook页面的横幅图像替换Facebook点赞框。这会立即将40多个请求减少到1个,并且您将不再拥有外部依赖项。你可以通过这种方式变得非常有创意,并且在设计和性能之间取得了很好的平衡。

    选项 3 – 摆脱它

    最后,最后的选择是完全摆脱它。我们在测试站点上就是这样做的,如下所示,它将我们的加载时间从909毫秒降低到786毫秒。它将整体页面重量从1.7MB 降低到1.0MB,将请求总数从138降低到78。这里要真正指出的一件事是页面重量降低。Facebook点赞框增加了700 KB!这很糟糕。

    删除Facebook点赞框后(速度测试)

    删除Facebook点赞框后(速度测试

    处理Instagram小部件

    接下来要看的是Instagram Widget。在我们的示例中,我们使用的是免费的Instagram Feed插件。该插件实际上不是问题,而是生成的来自scontent.cdninstagram.com的请求。我们可以看到这些条相当短,这意味着它们不会造成太多延迟。但是,一旦将它们全部加在一起,这就是问题所在。同样,这是一个绝对数量的问题。您可能会看到这里形成了一种模式。WordPress网站上的许多3rd-party性能问题不是来自单个请求的延迟,而是那些不关心性能的开始。

    Instagram外部请求

    Instagram外部请求

    我们还建议人们远离Instagram小部件,除非你真的需要它,因为它会产生大量请求。这里有一些建议可以更好地处理这个问题。

    选项 1 – 改用图片横幅

    就像Facebook的点赞框一样,除非您真的需要动态Instagram小部件,否则请创建一个横幅,而不是链接到您的Instagram页面。这会立即将20多个请求减少到1个,并且您将不再拥有外部依赖项。你可以通过这种方式变得非常有创意,并且在设计和性能之间取得了很好的平衡。

    选项 2 – 摆脱它

    当然,您可以完全摆脱它。我们在测试站点上就是这样做的,如下所示,它将我们的加载时间从786毫秒降低到690毫秒。它将整体页面重量从1.0MB 减少到814.3KB,请求总数从78个减少到57个。

    删除Instagram小部件后

    删除Instagram小部件后(速度测试

    处理Disqus评论

    接下来要看的是Disqus评论。在我们的示例中,我们使用免费的Disqus评论系统插件。Disqus的最大问题是它会产生大量请求,并且必须为每个评论的人加载gravatar。我们在有关如何加快WordPress评论速度的文章中对此进行了详细介绍。

    您可能还想完全禁用WordPress上的评论

    如果您是大型商业网站,您可能还需要付费才能删除Disqus广告,如果您不这样做,最终会在您的网站上生成更多请求。您可以在下面看到它生成的一些请求的一小段。

    Disqus外部请求

    Disqus外部请求

    在处理评论方面,这里有一些建议。

    选项 1 – 延迟加载Disqus评论

    延迟加载是在用户向下滚动页面之前不加载资产和脚本的过程。这确保了首页加载速度更快。您可以使用Joel James提供的免费Disqus Conditional Load插件轻松延迟加载Disqus评论。我们在测试站点上安装了该插件,如下所示,它将我们的加载时间从690毫秒降至603毫秒。它将整体页面重量从814 KB降低到366.1KB,将请求总数从57降低到24。需要指出的一件事是大幅降低页面重量!

    延迟加载Disqus后

    延迟加载Disqus后(速度测试

    选项 2 – 延迟加载原生WordPress评论

    您的另一个最佳选择是延迟加载原生WordPress评论。延迟加载Disqus插件的开发者Joel James也有一个名为Lazy Load for Comments的免费插件。这以与上述方式非常相似的方式工作。我们在测试站点上安装了该插件,如下所示,它减少了几乎相同的加载时间。

    延迟加载原生WordPress评论后

    延迟加载原生WordPress评论后(速度测试

    处理Facebook转化跟踪像素

    最后,我们来看看Facebook转化跟踪像素。显然,大多数人使用它来收集有关访问其网站的人的数据,或在投放Facebook广告时跟踪转化。因此,删除它可能并不总是一种选择,而且您确实无法做任何事情来提高它的性能。正如您在下面看到的,它负责生成5个不同的HTTP请求,不幸的是,它们并不是最快的。

    分析WordPress网站上的第三方服务性能-1

    Facebook转化跟踪像素外部请求

    我们将简单地删除它以向您展示它对您网站性能的影响程度。将其从我们的网站上取下后,我们的加载时间从611毫秒降至429毫秒。它将整体页面重量从367.5 KB减少到343.2KB,请求总数从27减少到22。

    去除FB像素后

    去除FB像素后(速度测试

    以上示例只是您可能在WordPress网站上运行的数千个外部服务中的一小部分。查看每一项并确定它对您网站性能的影响程度非常重要。如您所见,只有一个坏苹果会引起巨大的问题!

    外部服务可以帮助提高绩效

    虽然大多数外部服务会损害您网站的性能,但也有一些可以帮助它。CDN(例如KeyCDN或Cloudflare)可以极大地加快您的网站速度,而只需进行最少的设置工作。在下面的示例中,我们将KeyCDN添加到我们的测试站点。如您所见,它使我们的加载时间又减少了100毫秒。

    CDN后

    CDN后(速度测试

    进一步优化

    然后,我们对WordPress网站进行了一些额外的优化,使我们的性能等级得分达到100分,加载时间为270毫秒。这些优化包括:

    以下是一些优化的更深入的教程:

    优化后

    优化后(速度测试

    如您所见,我们的加载时间从 1.94 秒缩短到了 270 毫秒!当然,您可能需要一些外部服务,每个企业都需要。但重要的是不要忘记分析每一个。如果您发现加载时间过长,请联系负责它的开发人员或公司并提出问题。

    防止停滞加载

    更大的问题是脚本在完成自身加载时阻止加载。如果像这样的脚本包含在标题中,它可以使您的网站无限期地保持空白。因此,页眉中并非绝对必要的任何内容都应放在页脚中。这将允许您的网站在有问题的脚本甚至开始加载之前完全加载。如果你使用wp_enqueue_script()函数(你应该),你可以使用第五个参数来指示它应该加载到页脚中。

    如果您发现插件无缘无故地在页眉中加载了资产,您可以使用wp_dequeue_script()将其从页眉中删除,然后wp_enqueue_script()以相同的方式注册它,但在页脚中。

    使用谷歌标签管理器

    帮助解决第三方性能问题的另一种方法是使用免费工具,例如Google Tag Manager。这使您可以在一个地方管理所有脚本和标签。这样做的一些好处是它们将异步加载,管理变得更容易,并且您可以为加载脚本的页面设置触发触发器。

    Google跟踪代码管理器触发触发器 Google跟踪代码管理器触发触发器

    但是,这样做也有一些缺点:

    Google跟踪代码管理器不会减少您网站或应用程序上的代码数量,但它确实简化了管理它们的任务。对于网站,Google跟踪代码管理器异步执行,并且可以配置为仅在需要时触发代码,从而帮助您的页面更快地加载。(来源

    如果您使用Google跟踪代码管理器,您还将有另一个HTTP请求和对googletagmanager.com的DNS查找,即使它非常微不足道。

    googletagmanager.com请求

    googletagmanager.com请求

    我们建议您使用Google跟踪代码管理器来查找具有大量第三方服务和集成的大型未优化网站。对于拥有开发人员的小型网站,您很可能不会看到使用GTM带来的性能提升。

    分析间歇性第三方性能问题

    解决间歇性问题的方式与解决持续性问题的方式相同,但找出罪魁祸首更加困难。实施上述解决方案可能已经有所帮助,但知道导致问题的原因仍然很高兴。我们喜欢使用的工具是New Relic。您可以在下面看到一些 3rd 方广告网络的示例以及一段时间内与它们相关的大量加载时间。

    New Relic Monitoring – 外部广告网络

    New Relic Monitoring – 外部广告网络

    但具有讽刺意味的是,New Relic也可能导致性能问题。在这种情况下,我们建议将其用于故障排除和零星监控,而不是持续使用。您还可以使用GTMetrix之类的工具在您的站点上安排每小时速度检查。几天后,您可以查看并在一个漂亮的小图表中查看结果:

    GTmetrix报告时间

    GTmetrix报告时间

    这会告诉您您的网站何时比平均速度慢。我们将首先单击最右侧的尖峰以进入该时间点创建的报告。然后,我们将查看瀑布以查看是哪个资源造成了问题。请务必查看我们关于如何使用GTmetrix诊断您网站上的问题的深入文章。

    GTmetrix瀑布图

    GTmetrix瀑布图

    那里有一个资产似乎会阻止后续资产,看看中间附近的绿色条。原来这是来自Google Recaptcha。632ms看似一瞬间,但实际上却是很多。一个页面真的应该在2 seconds-ish内加载。其中超过三分之一仅由这一资产占用。资产应该稍后加载,或者应该放弃它以支持其他验证方法。

    小结

    正如你所看到的,仅仅几个外部服务就可以产生巨大的影响。第三方性能不容忽视,它与现场和后端优化齐头并进。值得庆幸的是,有很多事情可以做,特别是如果您涉及开发人员。抛弃服务,调整它们以以不同的方式(例如异步)加载,以另一种方式(例如横幅)提供相同的东西,所有这些都可以大大提高您的网站速度!

  • 如何在您的WordPress网站上安装Cloudflare

    如何在您的WordPress网站上安装Cloudflare

    Cloudflare是一家提供内容交付网络 (CDN)、DNS、  DDoS保护和安全服务的公司。他们在网络性能行业因快速的DNS查找时间而闻名,并拥有由全球100多个不同数据中心组成的强大网络。他们得到了谷歌、微软和高通等业内知名人士的支持。他们的一些客户包括纳斯达克、Digital Ocean、Zendesk和思科。

    如果您正在寻找一种简单的方法来加快和增强WordPress网站的安全性,Cloudflare是一个很好的解决方案。大多数客户甚至可以使用他们的免费计划,该计划提供无限的CDN带宽。请按照以下步骤在您的WordPress网站上安装Cloudflare。

    注意:如果您使用Cloudflare,则无法使用来自Amazon Route 53的高级DNS。Cloudflare作为完整的代理服务运行,这意味着您必须选择其中一个。如果您想使用我们的高级DNS,您可以使用替代CDN来加速您的网站,例如KeyCDN,它不是一个完整的代理。

    1. 安装Cloudflare
    2. 常见的Cloudflare问题
    3. 如何清除Cloudflare缓存

    安装Cloudflare

    本教程假设您已经有一个Cloudflare帐户。如果您不这样做,您可以访问Cloudflare网站并注册一个免费帐户。

    第 1 步

    登录Cloudflare仪表盘,然后单击“+ 添加站点”。输入您的WordPress站点的域名,然后单击“Begin Scan”。(不需要加www或者HTTP/HTTPS,根域就可以了)

    将WordPress站点添加到Cloudflare

    将WordPress站点添加到Cloudflare

    可能需要一两分钟,然后单击“Continue Setup”。

    第 2 步

    Cloudflare为您提供了两种选择。您可以使用他们的CDN和protection(加速和保护您的网站),或者您可以简单地使用他们的DNS。大多数客户会想要前者,因为这是您将从Cloudflare提供的一切中受益的地方。为确保您的域已启用,请确保云以橙色点亮。如果您有其他记录,例如电子邮件(MX记录),这些记录应该关闭Cloudflare(灰色)。验证完所有内容后单击继续。您以后可以随时修改这些记录。

    验证DNS记录

    验证DNS记录

    第 3 步

    在下一页上,您需要选择 Cloudflare 计划。我们建议从适用于大多数用户的免费计划开始。然后点击“继续”。您可以阅读有关Cloudflare 计划差异的更多信息。

    免费Cloudflare计划

    免费Cloudflare计划

    第 4 步

    然后,您需要将域上的名称服务器更改为指向Cloudflare(使用它们提供的名称)。因为Cloudflare是一个完整的代理服务,所以基本上它的工作原理是将您的域指向Cloudflare,然后Cloudflare将您的域指向服务器地址。切换名称服务器时没有停机时间。这里有几个指向不同域名注册商的文档链接,说明如何更改它们。

    然后点击“Continue”。

    更改为Cloudflare的名称服务器

    更改为Cloudflare的名称服务器

    这应该不会花费很长时间,但最多需要24小时才能处理此更改。

    第 5 步

    如果您的站点尚未指向服务器,则需要更新A记录以指向Cloudflare仪表盘中的服务器IP。单击“DNS”并在A名称记录旁边,将其更改为您的服务器的IPv4地址。

    更新Cloudflare A名称记录
    更新Cloudflare A名称记录

    就是这样!您的WordPress网站现在已安装Cloudflare。

    第 6 步(可选)

    对于WordPress用户,我们确实推荐了一个额外的步骤。这不是必需的,但如果您不安装官方Cloudflare插件,Cloudflare的某些功能可能无法正常运行。

    免费的Cloudflare WordPress插件

    免费的Cloudflare WordPress插件

    您可以从WordPress插件库下载它, 也可以在WordPress仪表盘中的“插件-安装插件”下搜索它。它具有以下特点:

    • 修复来自同一IP地址的WordPress评论
    • 自动缓存清除
    • 启用Cloudflare的Universal SSL时重写标头以防止重定向循环
    • 能够从插件本身更改Cloudflare帐户的设置(缓存清除、安全级别、图像优化等)
    • 查看分析,例如总访问者、节省的带宽和阻止的威胁
    • 支持HTTP2/服务器推送

    安装插件后,您需要在设置中输入您的Cloudflare电子邮件地址和API密钥。您可以在此处获取您的API密钥。复制写着“Global API Key”的那个。然后单击“Save API Credentials”。

    Cloudflare WordPress插件API凭据

    Cloudflare WordPress插件API凭据

    在“Home”选项卡下,您可以根据需要应用默认设置或更新设置。

    Cloudflare插件默认设置

    Cloudflare插件默认设置

    在“Setting”选项卡下,如果您使用专业计划,您可以启用图像优化、打开开发模式、更改安全级别并启用自动HTTPS重写。

    Cloudflare插件速度和安全设置

    Cloudflare插件速度和安全设置

    在“Analytics”选项卡下,您可以查看WordPress网站上的请求数量、带宽、访问者和威胁。

    Cloudflare插件分析

    Cloudflare插件分析

    常见的Cloudflare问题

    用户尝试在其WordPress网站上安装Cloudflare时遇到的一个非常常见的错误是Chrome中的“ ERR_TOO_MANY_REDIRECTS ”或“页面未正确重定向”(Firefox)。

    如何在您的WordPress网站上安装Cloudflare-1

    Cloudflare的常见flexible SSL错误

    这是因为已经在您的Web服务器上设置了SSL,然后使用Cloudflare启用了flexible SSL。

    将Cloudflare加密级别设置为Full

    将Cloudflare加密级别设置为Full

    否则,您可以创建页面规则来解决此问题。

    如何清除Cloudflare缓存

    遇到问题?有时您需要清除(清除)Cloudflare缓存。有两种简单的方法可以做到这一点。

    选项 1 – 清除WordPress插件中的Cloudflare缓存

    如果您安装了Cloudflare WordPress插件,您可以从“设置 → Cloudflare”中清除缓存。

    清除WordPress插件中的Cloudflare缓存

    清除WordPress插件中的Cloudflare缓存

    选项 2 – 从控制面板清除Cloudflare缓存

    您的另一个选择是从他们的控制面板中清除Cloudflare缓存。为此,请单击“Caching”选项卡,然后单击“Purge Everything”。

    清除Cloudflare缓存

    清除Cloudflare缓存

    一旦一切就绪并顺利运行,最好只清除单个文件的缓存。Cloudflare提供了一种简单的方法来执行此操作。

    自定义清除文件缓存

    自定义清除文件缓存

    注意:如果您清除所有内容,您可能会暂时降低网站的性能,因为资产必须重新缓存。但是,有时这是不可避免的,尤其是当您不确定站点上的哪些脚本或资产需要刷新时。

    其他Cloudflare设置

    既然您知道如何安装Cloudflare,我们建议您查看我们关于WordPress用户最佳Cloudflare设置的详细帖子。您还可以了解Cloudflare 的自动平台优化 (APO)工具。

  • 如何为WordPress设置Cloudflare APO – 将性能提升高达300%

    如何为WordPress设置Cloudflare APO - 将性能提升高达300%

    对于性能爱好者来说,Cloudflare的APO代表着在最大化WordPress性能方面向前迈出了一大步。

    在我们的基准测试中,我们发现在我们的测试站点上启用APO可以将页面加载时间减少70-300%,具体取决于测试位置。

    在本文中,我们将深入探讨Cloudflare APO的工作原理以及如何使用它来提高WordPress网站的性能!

    1. 什么是自动平台优化 (APO)?
    2. 边缘的静态HTML
    3. 2022年Web性能状况
    4. Cloudflare的自动平台优化如何工作
    5. 使用高性能托管和Cloudflare APO最大限度地提高WordPress性能
    6. 如何为WordPress使用Cloudflare自动平台优化
    7. 如何确认适用于WordPress的Cloudflare APO是否正常工作
    8. 不使用Cloudflare插件的自动平台优化

    什么是自动平台优化 (APO)?

    Automatic Platform Optimization(以下简称APO)是Cloudflare提供的一套新的一键式平台定制优化服务。

    第一个接受“APO待遇”的平台是WordPress,它是全球最受欢迎的CMS,市场份额超过60%。未来,我们希望看到类似的APO服务适用于其他CMS和平台。

    在较高的层面上,Cloudflare的WordPress APO通过两种主要方式提高了网站性能。

    1. WordPress站点页面的静态HTML副本缓存在全球各地的Cloudflare边缘服务器中。
    2. 第三方字体由Cloudflare缓存和提供。

    让我们深入了解一下APO在技术层面上的工作方式和原因。

    边缘的静态HTML

    Cloudflare的APO与其他传统页面缓存和CDN解决方案之间的关键区别在于它能够在Cloudflare的边缘直接缓存静态HTML。为了描绘更清晰的画面,让我们通过从“无优化”到APO的四种不同的WordPress设置。

    WordPress设置 #1 – 无页面缓存或CDN

    默认情况下,WordPress不提供页面缓存或CDN支持。使用此配置,即使请求之间没有更改页面内容,所有请求也需要由PHP动态生成。

    此外,没有内容交付网络 (CDN) 集成意味着所有静态资产(如CSS、JS、图像和字体)都由源服务器提供服务。

    这种配置会使WordPress站点变得非常慢,尤其是对于远离源服务器的访问者而言。

    WordPress设置 #2 – 没有CDN的页面缓存

    实施页面缓存是提高WordPress性能的最佳策略之一。在一些WordPress托管服务器,托管堆栈包括一个高度调整的页面缓存层,由Nginx的FastCGI缓存模块提供支持。

    页面缓存极大地减少了源服务器上的CPU负载,因为可以从缓存中提供请求,而无需生成动态HTML。

    没有CDN的页面缓存

    这可以释放您的CPU以专注于其他重要的动态任务,并使您的WordPress网站更加稳定。虽然此配置可能允许您的站点每秒处理更多请求,但它并不能解决“距离问题”。

    如果没有合适的CDN,向遥远的访问者提供静态资产仍然是一个问题。

    WordPress设置 #3 – 使用CDN进行页面缓存

    到目前为止,添加用于提供静态资产的CDN的页面缓存是托管WordPress网站的最高效方式。

    在这个模型中,源服务器仍然负责为页面提供实际的HTML。但是,CSS文件、图像和字体等静态资产被卸载到世界各地的各种CDN存在点 (PoP)。该模型背后的想法是静态资产,尤其是大图像,构成请求页面大小的大部分. 因此,通过将资产卸载到更靠近访问者的服务器,可以减少加载时间并提高性能。

    使用CDN的全球流量路由

    使用CDN的全球流量路由

    虽然此配置比前两个配置提供了显着改进,但它确实让您想知道如果WordPress性能不再因必须从源服务器提供HTML而成为瓶颈,会发生什么。

    令人惊讶的是,在为WordPress引入Cloudflare的APO之前,这样的设置是不可行的——至少对于非技术用户来说是不可行的。

    WordPress设置 #4 – 适用于WordPress的Cloudflare APO

    Cloudflare APO是世界上最新的WordPress性能优化解决方案。与之前受源站服务器性能限制的WordPress设置不同,启用APO的站点从访问者的角度来看基本上变得“无源”。

    使用Cloudflare APO进行全球流量路由

    使用Cloudflare APO进行全球流量路由

    为此,Cloudflare利用其全球分布的CDN以及Workers/Workers KV来创建您的WordPress站点的静态HTML表示。我们将在本文后面深入了解Cloudflare APO的工作原理。

    现在,只要知道启用了APO的兼容WordPress站点不再受制于来源引起的延迟。换句话说,来自美国、德国和日本的访问者的请求将由附近的数据中心而不是您的源服务器提供服务。

    2022年Web性能状况

    在过去的几年里,专业的Web开发行业发生了很大的变化。越来越多的开发人员正在从WordPress这样的单体架构转向更灵活和高性能的静态站点生成器,比如Hugo和JavaScript框架,比如Gatsby

    我们明智地使用“性能”一词,因为Web性能通常可以被解释为一个主观指标。

    例如,页面的加载时间可能会根据测试位置和一天中的时间而波动。

    因此,一味地说Gatsby静态网站比WordPress网站快是没有任何意义的,直到建立了一些论证的上下文。

    在当今高度连接的世界中,Web性能测试最重要的环境之一是世界不同地区的加载时间。

    这就是静态网站在性能方面优于WordPress的地方。默认情况下,静态站点可以直接上传到全球分布的CDN——这使得它们在全球范围内快速传播,无需任何额外工作。

    由于WordPress站点需要某种类型的源服务器来生成HTML,因此它无法直接利用Netlify、Vercel和Cloudflare自己的Workers Sites等平台进行无摩擦的全球交付。从业务角度来看,这意味着您可能会失去远离原始服务器的潜在访问者和客户,因为Google在生成搜索结果时会考虑页面速度。

    这就是Cloudflare的WordPress APO发挥作用的地方。

    启用Cloudflare APO将WordPress性能提高了300%

    启用Cloudflare APO将WordPress性能提高了300%

    Cloudflare的WordPress自动平台优化是对2022年WordPress性能意味着什么的彻底重新思考。正如我们之前提到的,在我们的测试站点上启用APO可将加载时间从70%减少到300%,具体取决于测试位置。这是可能的,因为APO有效地消除了作为性能瓶颈的源服务器。

    Cloudflare的自动平台优化如何工作

    使用Cloudflare APO,您的WordPress站点的HTML缓存在Cloudflare的全球边缘服务器中。这可以通过Workers KV实现,这是一种分布式键值数据库服务,具有超快的全局传播(不到60秒)。

    当数据通过Cloudflare API写入Workers KV时,它会在几秒钟内自动复制到全球150多个Cloudflare数据中心。

    这使得Workers KV成为加速WordPress网站的主要候选者,因为文章和页面可以很容易地用键值机制表示——URL是“键”,HTML页面内容是“值”。

    在Cloudflare Workers KV中存储为键值对象的网页

    在Cloudflare Workers KV中存储为键值对象的网页

    为您的WordPress站点启用APO后,对您站点的大多数请求将不再访问您的源服务器。

    相反,请求将从本地Cloudflare CDN缓存(如果缓存页面存在)或Workers KV(如果缓存页面在Cloudflare的CDN上不存在)提供。

    如果CDN缓存或Workers KV数据库中不存在页面,则Cloudflare将向您的源服务器发出单个请求并缓存新页面的HTML。

    这里的神奇之处在于Cloudflare Workers KV充当您的源服务器的某种分布式镜像。回想一下,存储在Workers KV中的数据会在Cloudflare的整个服务器网络中自动复制。

    这意味着即使您运行WordPress的源服务器位于美国某处,来自日本的访问者的请求也不需要访问您的源服务器来启动本地CDN缓存区域。

    相反,来自日本的访问者将获得来自附近Cloudflare数据中心的Workers KV数据库或CDN缓存的缓存HTML。

    这种新的交付模型与以前为WordPress缓存HTML页面的尝试大不相同。 

    以前,最流行的“整页缓存”方法涉及创建Cloudflare页面规则来“缓存所有内容”。虽然这种方法可以显着提高性能,但它并不是一种非常有效的缓存方法,因为它依赖于“拉”模型而不是Workers KV的“推”模型,后者会自动在全球范围内推送HTML。

    通过上一页基于规则的设置,访问美国Cloudflare缓存区的访问者不会为其他位置的访问者缓存资产——这意味着从全球内容交付的角度来看,网站无法有效利用Cloudflare的网络。

    自动平台优化通过缓存第三方字体更进一步。在许多情况下,字体最终会占据页面请求大小的很大一部分。

    与通常从根域提供的CSS、JS和图像不同,字体通常来自第三方服务,如Google Fonts。这意味着Cloudflare等基于代理的缓存服务无法缓存字体和提供字体。

    由于APO由Cloudflare Worker(位于源服务器和访问者之间的可编程JavaScript服务工作者)提供支持,因此可以注入额外的逻辑来完成基本缓存之外的任务。

    在这种情况下,APO使用Cloudflare Worker来缓存第三方字体并使用内联CSS修改页面的HTML,以指向Cloudflare CDN上的缓存字体。这消除了获取字体的额外外部请求的需要,并减少了服务页面所需的连接数量和加载时间。

    最后,由于APO通过WordPress插件与您的站点集成,因此每当您更新站点上的页面时,都会自动清除Cloudflare缓存。这可确保访问者始终能够看到您网站的最新版本,而无需任何人工干预。

    使用高性能托管和Cloudflare APO最大限度地提高WordPress性能

    然而,Cloudflare APO并不是灵丹妙药。选择以性能为中心的WordPress主机仍然非常重要,主要有两个原因。

    1. Cloudflare APO仅缓存未登录用户的前端页面。与服务器级页面缓存配置类似,APO不会缓存具有特定cookie和已登录用户的页面。这意味着原始服务器性能仍然是等式的关键部分。
    2. 出色的WordPress体验不仅仅包括快速的前端性能。由于WordPress本质上是一个动态CMS,因此在运营WordPress网站时需要考虑许多因素。

    这里有四个用例展示了为什么即使您使用Cloudflare APO仍应选择高性能WordPress主机。

    1. WooCommerce, Easy Digital Downloads和电子商务

    当检测到某些与电子商务相关的cookie时,Cloudflare APO会选择性地绕过缓存。例如,当访问者在WooCommerce网站上将商品添加到购物车时,WordPress会自动设置woocommerce_items_in_cart cookie。当检测到此cookie时,APO会绕过缓存以避免缓存和提供客户特定的数据。因此,即使启用了自动平台优化,WooCommerce和其他基于WordPress的电子商务平台仍将严重依赖原始服务器的性能。

    2. WordPress仪表盘性能

    由于Cloudflare APO不会为登录用户缓存HTML,因此在WordPress仪表盘中导航将始终完全依赖于您的源服务器性能。如果您没有使用性能优化的主机,那么在您的WordPress网站上编写和发布内容、管理图像和其他媒体资产以及运行维护例程等任务可能会变成非常缓慢的体验。这会对您的业务成果产生直接的负面影响。

    3. WordPress会员网站和论坛

    如果您使用Ultimate Membership Pro之类的插件来管理您的WordPress会员网站,或者使用bbPress来支持WordPress论坛,Cloudflare APO将无法优化您的大部分流量。由于会员网站和论坛通常需要用户登录,Cloudflare APO将自动绕过这些用户的HTML缓存。因此,使用高性能主机仍然是WordPress会员网站和论坛保持快速用户体验的最佳方式。

    4. WordPress Cron作业

    WordPress cron (WP-Cron)可帮助您在WordPress网站上安排和自动化后端任务。您的站点可能会使用cron作业在特定时间发布文章。像这样的简单任务在CPU资源方面不需要太多,但其他任务可能会占用更多资源。例如,使用备份插件每12小时自动将您的WordPress站点备份到ZIP存档之类的任务会占用更多CPU。

    由于Cloudflare APO仅有助于优化前端内容,因此您仍需要将站点托管在高性能主机上,以最大限度地提高后端任务的性能和登录用户体验。

    如何为WordPress使用Cloudflare自动平台优化

    既然我们已经讨论了为什么Cloudflare WordPress自动平台优化会改变游戏规则,那么让我们来看看如何将服务添加到您的WordPress网站。

    APO适用于Cloudflare免费和付费计划。对于免费的Cloudflare用户,需要额外支付5美元/月的APO费用。如果您在Cloudflare上使用Pro、Business或Enterprise计划,则可以免费启用APO。

    以下是开始使用Cloudflare APO所需的操作:

    1. 在Cloudflare仪表盘中创建API令牌。
    2. 安装官方Cloudflare WordPress插件。
    3. 启用自动平台优化。

    1. 创建Cloudflare API令牌

    在启用APO之前,您需要先生成API令牌并安装Cloudflare WordPress插件。要生成API令牌,请单击Cloudflare仪表盘右上角的个人资料图标,单击“My Profile”,选择“API Tokens”选项卡,然后单击Create Token

    创建Cloudflare API令牌

    创建Cloudflare API令牌

    在“API Token Templates”下,单击WordPress选项旁边的Use Template

    选择WordPress API令牌模板

    选择WordPress API令牌模板

    “WordPress”模板将生成一个具有必要权限的API令牌,以允许自动平台优化正常运行。默认设置是您开始使用APO所需的全部,但如果您需要将API令牌锁定到特定用户或区域,请随意调整“Account Resources”和“Zone Resources”设置。

    完成令牌参数配置后,向下滚动并单击Continue to Summary

    配置Cloudflare API令牌参数

    配置Cloudflare API令牌参数

    最后,单击Create Token以完成该过程。

    确认Cloudflare API令牌的创建

    确认Cloudflare API令牌的创建

    请务必将API令牌复制到安全位置。稍后安装Cloudflare WordPress插件时将需要它。将API令牌记录在密码管理器等安全位置后,请随时关闭页面。

    在安全的地方记录您的Cloudflare API令牌

    在安全的地方记录您的Cloudflare API令牌

    2. 安装Cloudflare WordPress插件

    Cloudflare WordPress插件可以直接从WordPress插件库安装。要找到它,请在WordPress仪表盘中搜索“Cloudflare”。请务必安装官方Cloudflare插件,而不是“WP Cloudflare Super Page Cache”,这是第一个搜索结果。

     

    安装官方Cloudflare WordPress插件

    安装官方Cloudflare WordPress插件

    接下来,转到WordPress仪表盘侧边栏中的设置 > Cloudflare,然后单击“Sign in Here”。

    登录您的Cloudflare帐户

    登录您的Cloudflare帐户

    输入与您的Cloudflare帐户关联的电子邮件地址以及您之前生成的API令牌。单击Save API Credentials以完成登录过程。

    输入您的电子邮件地址和Cloudflare API令牌

    输入您的电子邮件地址和Cloudflare API令牌

    现在Cloudflare WordPress插件已全部设置完毕,让我们前往Cloudflare仪表盘以启用自动平台优化。

    3. 在Cloudflare中启用自动平台优化

    Cloudflare Pro、Business和Enterprise计划中包含WordPress的自动平台优化,无需额外费用。如果您使用免费的Cloudflare计划,则APO附加组件每月5美元。要启用APO,请转到Cloudflare仪表盘中的Speed > Optimization

    启用APO

    要启用APO,请导航到Speed > Optimization

    向下滚动到“Optimized Delivery”部分,并启用“Automatic Platform Optimization for WordPress”。如果您使用的是免费计划,Cloudflare将在此期间提示您提供账单详细信息。启用APO后,您应该会看到一条消息“WordPress plugin successfully detected on [your domain]”。如果您没有看到此消息,我们建议您重新安装Cloudflare插件或联系Cloudflare支持以获得进一步帮助。

    在Cloudflare仪表盘中为WordPress启用自动平台优化

    在Cloudflare仪表盘中为WordPress启用自动平台优化

    在您的WordPress仪表盘中,转到侧栏中的设置 > Cloudflare。单击“Apply Recommended Cloudflare Settings for WordPress”旁边的Apply按钮——这将优化您的WordPress的Cloudflare设置最后,确保在插件设置中也启用了“Automatic Platform Optimization”。

    Cloudflare WordPress插件设置

    Cloudflare WordPress插件设置

    如何确认适用于WordPress的Cloudflare APO是否正常工作

    此时,Cloudflare自动平台优化应该在您的站点上处于活动状态!以下是确认APO是否正常工作的方法。首先,确保为您的WordPress站点的域启用了Cloudflare的DNS选项卡中的橙色云。如果未启用橙色云,Cloudflare将不会为您的域代理流量——这意味着APO将无法正常工作。

    确认Cloudflare橙色云已启用

    确认Cloudflare橙色云已启用

    如何使用浏览器检查器检查Cloudflare APO缓存状态

    接下来,您可以使用Web浏览器的内置检查器检查对您网站的请求的HTTP标头。我们将在下面的示例中使用Google Chrome。首先,在隐身模式下启动一个新的浏览器窗口。

    在Google Chrome中启动一个新的隐身窗口

    在Google Chrome中启动一个新的隐身窗口

    接下来,转到您的WordPress站点,右键单击该页面,然后选择“Inspect”以打开浏览器检查器。您还可以通过转到Chrome更多按钮菜单栏中的更多工具 > 开发者工具来访问检查器单击对您的域的请求(下例中的brianwp.com)。在子菜单中,单击“Headers”以显示HTTP响应标头。

    使用浏览器检查器检查Cloudflare缓存状态

    使用浏览器检查器检查Cloudflare缓存状态

    启用APO后,您应该会看到一些与APO相关的标头。

    • cf-apo-via指示从何处提供请求。此标头有几个可能的值——“origin, no-cache”、“origin, bypass”和“cache”。如果您看到此标头的“origin, no-cache”值,则表示源服务器已向Cloudflare发送了“Cache-Control: no-cache”标头。“origin, bypass” 值表示Cloudflare的HTML缓存被绕过,请求是从源端提供的。最后,“cache”值表示请求是从Cloudflare的缓存中提供的。
    • cf-cache-status指示页面是否从Cloudflare的CDN提供。刷新页面几次后,您应该会看到“HIT”状态。如果您的cf-cache-status标头在几次刷新后显示“DYNAMIC”,则可能是由于配置错误或与cookie相关的不兼容而绕过了APO。
    • cf-edge-cache根据来自您的原始服务器的缓存指令指示页面的缓存兼容性。此标头有两个可能的值——“no-cache”和“cache, platform=wordpress”。当使用Cloudflare WordPress插件正确配置APO时,此标头将为不应缓存的页面返回“no-cache”,为可缓存的页面返回“cache, platform=wordpress”。
    • age表示页面在Cloudflare的CDN中缓存的秒数。

    如果您在检查WordPress站点时看到上面的标头,则表示APO已全部设置。现在,继续进行速度测试,看看您的网站有多快!

    如何使用curl检查Cloudflare APO缓存状态

    您还可以在终端中使用下面的curl命令确认Cloudflare APO是否正常工作。请注意,该命令传递了一个“Accept: text/html”标头。这是检查APO缓存状态时所必需的。

    curl --request GET -I -H "Accept: text/html" https://www.website.com

    运行命令后,您应该会看到如下所示的响应标头列表。如您所见,cf-cache-statuscf-apo-viacf-edge-cacheage标头显示请求由Cloudflare的缓存提供服务。

    使用curl检查Cloudflare APO缓存状态

    使用curl检查Cloudflare APO缓存状态

    不使用Cloudflare插件的APO自动平台优化

    Cloudflare建议将自动平台优化与官方Cloudflare WordPress插件一起使用。这也是我们建议的方法,因为它可以确保您从APO中获得最大的性能优势。如果您的网站与Cloudflare WordPress插件不兼容,我们建议您与开发人员合作以使您的网站兼容。

    如果您真的无法安装Cloudflare插件,则可以在没有插件的情况下使用APO。如果您选择这条路线,您仍然可以利用一些性能优化,但有几个重要的限制需要注意。

    带有WordPress插件的Cloudflare APO

    安装Cloudflare WordPress插件后,自动平台优化提供以下HTML边缘缓存功能。

    • 具有30天TTL的HTML边缘缓存。
    • 文章发布或更新后30秒内缓存失效。
    • 为登录用户绕过HTML缓存。
    • 绕过某些cookie(如WooCommerce)的HTML缓存。
    • 如果可以从Cloudflare的CDN提供页面,则跳过对源服务器的请求。这减少了源服务器上的负载。

    没有WordPress插件的Cloudflare APO

    如果未安装Cloudflare WordPress插件,您可能会看到以下APO HTML边缘缓存功能。

    • 具有30天TTL的HTML边缘缓存。
    • 缓存在30分钟内失效(而不是30秒)
    • 绕过某些cookie(如WooCommerce)的HTML缓存。
    • 为了提供正确的缓存失效逻辑,仍然需要向源服务器发出请求。

    如您所见,将自动平台优化与官方Cloudflare WordPress插件一起使用有几个优点。

    小结

    WordPress的Cloudflare自动平台优化无疑是近期历史上提升WordPress性能的最重要服务。它超越了通常的Web服务器优化、服务器端页面缓存和CSS/JS缩小策略,并呈现了一些全新的东西。

    自成立以来,WordPress一直受到以下事实的限制:在CDN上缓存HTML页面没有一种简化且简单的方法。通过利用其由150多个数据中心、Workers和Workers KV组成的网络,Cloudflare在WordPress站点和采用尖端框架设计的静态站点之间拉平了性能竞争环境。

    这是一项不小的壮举,我们期待看到Cloudflare在未来如何将其自动平台优化功能扩展到其他CMS平台