有很多不同的优化,你可以使WordPress的,有的比其他更重要。经常被忽视的一个因素是与DNS相关的查询时间,以及它对您网站的影响程度。就像TTFB 和网络延迟一样,在计算您的总页面加载时间时,这是一个难题。所以今天我们将深入探讨如何减少DNS查询并加快速度,为什么你应该,以及它如何发挥你的WordPress网站的性能。
什么是DNS查找?
为了向您展示什么是DNS查询,您需要先了解DNS的工作原理。DNS(域名系统)本质上是互联网的中坚力量。解释DNS如何工作的常见参考是将其看作万维网的电话簿。您访问的每个网站和域都被映射到一个IP地址。
当您在地址栏中输入Google.com时,您的ISP会执行DNS查询以请求与该域名关联的域名服务器。然后到服务器的幕后完成到IP地址的映射,然后允许您使用域名访问它。没有DNS,你必须输入类似于216.58.217.206的内容才能访问Google。这不是很有趣!
当您浏览网站时,必须先下载任何请求之前,请求每个域名的DNS查询。但是,DNS查找不必在每个资源上执行。举个例子,假设我们有以下的HTTP请求:
https://wpdev.ink/
https://js.stripe.com/v3/
https://cdn.wpdev.ink/wp-content/themes/twentyseventeen/assets/images/header.jpg
https://cdn.wpdev.ink/wp-content/themes/twentyseventeen/assets/js/skip-link-focus-fix.js
https://cdn.wpdev.ink/wp-content/themes/twentyseventeen/assets/js/global.js
https://cdn.wpdev.ink/wp-content/themes/twentyseventeen/assets/js/jquery.scrollTo.js
https://cdn.wpdev.ink/fonts/open-sans-v13-latin-regular.woff2
https://cdn.wpdev.ink/fonts/open-sans-v13-latin-700.woff2
尽管上面总共有八个HTTP请求,但只有三个唯一的域。这意味着有三个DNS查找。
https://wpdev.ink
https://js.stripe.com
https://cdn.wpdev.ink
Pingdom中的DNS查找
以下是Pingdom网站速度测试工具中出现的上述请求。DNS表示为粉红色条,以毫秒为单位。当您第一次通过Pingdom运行您的网站时,它会执行一个全新的查询,并且必须查询每个域的DNS记录才能获取IP信息。请注意,它不必在cdn.wpdev.ink域上多次查询DNS。这就是DNS的工作原理。它只需要查询一次域名。所以总共有8个请求,但只有3个DNS查询。
这种DNS查找会导致额外的加载时间,因为在DNS查询完成之前,无法加载任何内容。注意下面的一个CDN URL上的DNS查询超过了300毫秒。这不包括在wpdev.ink或js.stripe.com上的查找。所以你可以看到随着时间的推移,这可以加起来。
当您不止一次通过Pingdom运行您的网站时,它会缓存DNS,因为它已经知道IP信息,不必再次执行查找。这是您的网站多次运行Pingdom后出现速度较快的原因之一。正如您在下面的屏幕中看到的那样,在第二次测试中,CDN URL上的DNS查找时间为0毫秒。这是很多人曲解的一个领域。但是不要担心,我们会在下面的DNS缓存中进一步介绍。
GTmetrix中的DNS查找
每个网站的速度测试工具略有不同,但几乎所有的人都为您计算DNS查找时间。下面是在GTmetrix中出现的相同请求。DNS表示为绿色条,以毫秒为单位。
WebPagetest中的DNS查找
这是一个使用WebPageTest的例子。他们实际上可以快速查看您的请求详细信息,您可以在其中单击“DNS查找”列并按最高响应时间对其进行排序。我们通过该工具运行usatoday.com作为例子,单单DNS查询时间花了6.5秒!
许多这些新闻网站由于其所有的外部请求而不被高度优化是相当普遍的。但是,正如你所看到的,他们网站上的DNS查询时间可能比大多数人的整个网站花费更多的时间。这就是为什么DNS很重要。
如何减少和加速DNS查找
现在您对DNS的工作原理有了一些了解,我们将向您介绍如何减少DNS查询并加快您的WordPress网站的速度。在一些网站速度测试工具中,这有时也被称为“最小化DNS查找”。
技巧1 – 使用快速DNS提供程序
与托管服务一样,理解这一点非常重要,那里有更快更慢的DNS提供商。这应该是你修复的第一件事情之一。
通常,域名注册商(如GoDaddy和Namecheap)提供的免费DNS非常缓慢。DNS提供商通常像CDN一样工作,他们在全球拥有多个POP。像亚马逊,Cloudflare,Dyn和DNS Made Easy这样的大型DNS提供商都拥有专门为低延迟环境设计的大规模基础设施。
我们进行了一些测试来比较一些流行的DNS提供商的速度。我们使用KeyCDN的性能工具以及SolveDNS速度测试,并取平均值。速度来自全球多个地点。正如你所看到的,除了Cloudflare,免费的DNS提供商肯定是慢的。这就是为什么如果你是认真的关于你的业务和网站,我们强烈建议去与一个优质的DNS提供商。
上述某些提供商在某些地区也比其他提供商快,因此确定您需要在哪些地区或全球范围内快速查找DNS是非常重要的。 DNSPerf是另一个较新的DNS速度比较工具,您可以在选择提供商时使用。您是否知道,您也可以使用Cloudflare的DNS而不使用 CDN功能?
技巧2 – 更改TTL值以利用DNS缓存
值得庆幸的是,正如我们上面提到的,由于DNS缓存,你不必担心在每一个页面加载发生查找。这实际上是第一次请求。DNS缓存的工作方式与缓存WordPress站点的方式类似。DNS从缓存中提供,直到它到期。DNS高速缓存的长度取决于他们所谓的生存时间(TTL)值。TTL越高,浏览器执行另一次DNS查找的可能性就越小。
您的域名注册商或第三方DNS提供商可以更改TTL值,以改善您的DNS缓存时间。值得注意的是ISP也会缓存DNS。以下是一些常见的TTL值。
- 300秒 = 5分钟
- 1800秒 = 30分钟
- 3600秒 = 1小时
- 43200秒 = 12小时
- 86400秒 = 24小时
30分钟到1小时通常是最常用的TTL值。但是,有些设置的TTL非常低,以便进行快速更新。Cloudflare是一个例子,如果您使用自动TTL,则默认为5分钟。查看不同类型的DNS记录并根据其更改的频率对其进行相应设置也是有益的。这里是一个例子:
- A和AAAA记录:更频繁地更改,从5分钟到1小时的任何时间通常都可以
- CNAME记录:几乎不会改变,像24小时这样的更高的TTL通常是可以的
- MX记录:更换次数少,一个像12小时的高TTL通常可以
- TXT记录:变化较少,高12个小时的TTL通常可以
说到TTL,真的没有对错的答案。但是,通过选择与您的网站更改频率相符的TTL,它可以改善您的DNS查找时间。
技巧3 – 减少域名(主机名)
减少您网站上DNS查询的最简单方法是简单地摆脱查询不同主机名的请求。 请记住,使用DNS查找不是关于请求的数量,而是关于不同域的数量。通过像Pingdom这样的工具运行你的WordPress站点,并确定每个请求是否真的有必要。由于DNS是一个主机名到IP的映射,你可能想知道为什么人们不只是指向一个IP呢?这是因为IP地址可以频繁更改,而主机名不会。
提示4 – 使用更快的DNS使用替代服务
虽然简单地减少域名(主机名)的数量说起来容易做起来难,但我们建议先查看那些DNS查询时间更长的域名。例如,在下面我们测试的这个站点中,我们可以很容易地发现到Crazy Egg跟踪脚本的DNS查询时间比其他时间长很多。这很可能是由于他们的DNS提供商不如其他一些DNS提供商那么快。
这是一个场景,也许你可以看看其他提供商,如提供相同服务的Hotjar,但也许正在使用更快的DNS提供商。将外部服务添加到您的WordPress网站,评估其性能可能非常重要。
技巧5 – 在CDN上移动和托管资源
减少DNS查询的最简单方法之一是将尽可能多的资源移动到您的CDN提供商。如果您通过Pingdom运行您的网站,则可以按域查看请求的总数。正如你在这个例子中看到的,93.8%的请求是到CDN URL的。向主机发送一个请求,向Google Analytics发送一个请求。通过将尽可能多的资源移动到CDN,这减少了涉及的DNS查找次数,因此减少了加载时间。
当然,现在并不总是可以把所有的东西都转移到CDN上。总会有一些外部资源或服务要求您从服务器上加载它们。但我们建议您浏览您的网站。很多时候,我们看到WordPress用户有很多资源没有在他们的CDN上正确托管。通过这样做,您还可以更好地利用HTTP / 2和并行。以下是我们经常看到可以改进的一些资源:
字体真棒
我们偶尔会看到插件开发人员和主题在WordPress网站上包含Font Awesome,但是有时会以这样一种方式将其排入队列中,默认情况下像CDN启动器这样的插件将无法捕捉到它。在这种情况下,我们建议与开发者联系,询问他们如何从CDN加载它。
Font Awesome的另一个常见情况是它有时从默认的BootstrapCDN(MaxCDN)加载。虽然没有什么不对,但是它增加了另一个不需要的DNS查询。在大多数情况下,从您自己的CDN中加载Font Awesome会更好,所以没有其他的查找方式。
Gravatars
如果您正在使用WordPress本机注释,则可能需要对secure.gravatar.com进行其他查找才能加载gravatars。这里一个简单的解决方案可能是利用延迟加载评论插件。虽然这不会减少DNS查找,但会延迟到用户向下滚动页面。因此,从某种意义上说,您正在减少首页加载时的DNS查询。请务必通过其他方式查看我们的博客文章,以加速评论。
Google字体
使用Google字体,您有一个额外的DNS请求来查找fonts.googleapis.com来获取CSS文件。然后你有额外的请求fonts.gstatic.com下载字体文件。当你在本地托管时,所有的请求都来自同一个域名或者CDN,而且很可能你不需要另外的CSS文件,因为它将会在你的WordPress主题的CSS文件中。有这样做的优点和缺点,但请查看我们有关如何在本地托管字体的深入文章。
Font Awesome,Gravatars和Google Fonts只是通过确保从CDN进行加载来减少DNS查找的几个例子。你目前正在从CDN加载所有可能的东西吗?看看总是很好的。
技巧6 – 利用DNS预取
关于加速DNS的另一个提示是使用DNS预取。这允许浏览器在后台执行页面上的DNS查询。您可以在WordPress网站的标题中添加一些代码。看下面的一些例子。
<!-- Prefetch DNS for external assets -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//www.google-analytics.com">
<link rel="dns-prefetch" href="//cdn.domain.com">
除了iOS Safari,Opera Mini和Android Browser之外,所有主流浏览器都支持 DNS预取 。
或者,如果您正在运行WordPress 4.6或更高版本,则可能需要使用 资源提示。开发人员可以使用wp_resource_hints过滤器为dns-prefetch,preconnect,prefetch或prerender添加自定义域和URL。
技巧7 – 推迟加载JavaScript
如果推迟加载JavaScript,则可以防止在文档完全加载之前加载。这不会减少所需的DNS查找次数,但可以防止它们被立即调用,从而加速用户体验。Varvy对如何推迟JavaScript有一个很好的解释。他在他的网站上使用的一个例子是他的Google Analytics(分析)脚本,因为没有理由将其加载。
在WordPress中,您可以使用像Async JavaScript这样的免费插件来推迟加载JavaScript。但是,重要的是要知道,您将很可能必须通过并列出您希望排除推迟应用的任何脚本。为什么?因为需要一些JavaScript来渲染。异步JavaScript也与Autoptimize插件完全兼容。
请务必查看我们的深度帖子,了解如何消除呈现屏蔽JavaScript和CSS。
技巧8 – 利用ANAME记录和CNAME展平
DNS Made Easy和Cloudflare等提供商提供的附加记录可以帮助减少后端的请求数量。
使用DNS轻松创建ANAME记录
ANAME记录为您提供了CNAME记录的功能,但在根级别。例如,假设您为www.domain.com配置了一个CNAME。www必须首先解析为主机名,然后解析为IP地址。这需要两个请求。使用ANAME记录,您可以跳过其中一个请求!如果正确设置,这些也可以与CDN结合使用。
CNAME
ANSWER SECTION:
www.domain.com. 1799 IN CNAME domain.com.
domain.com. 1799 IN A 192.168.1.2
一个名字
ANSWER SECTION:
www.domain.com. 1799 IN A 192.168.1.2
CNAME与Cloudflare展平
与ANAME记录类似,Cloudflare 在其区域顶点(或根)为其客户提供自动CNAME展平。
概要
DNS往往是被忽视的性能因素之一,但是如果你不小心的话,它可以很容易地贡献大部分的整体加载时间。了解DNS的工作方式,提供商速度越来越慢,以及如何减少查找来加速您的网站,这一点很重要。
你有任何关于加快DNS或减少查找的提示?如果是这样的话,我们很乐意在下面的评论中听到他们的消息!