如何减少DNS查找数量及提升查询速度插图

您可以对WordPress进行许多不同的优化,其中一些比其他优化更重要。一个经常被忽视的因素是与DNS相关的查找时间,以及它对您网站的影响有多大。就像TTFB和网络延迟一样,在计算总页面加载时间时,这是一个重要的难题。

所以今天我们将深入探讨一些关于如何减少DNS查找并加快它们的速度、为什么应该这样做以及它如何在WordPress网站的性能中发挥作用的建议。

什么是DNS Lookup?

要向您展示什么是DNS Lookup,您首先需要了解DNS的工作原理。DNS(域名系统)本质上是互联网的支柱。解释DNS如何工作的一个常见参考是将其视为万维网的电话簿。您访问的每个网站和域都映射到一个IP地址。

当您在地址栏中键入Google.com时,您的ISP会执行DNS查询以请求与域关联的名称服务器。然后由服务器在后台完成到IP地址的映射,然后您就可以使用域名来访问它。如果没有DNS,您将必须输入类似216.58.217.206的内容才能访问Google。那不是很好玩吗!

如何减少DNS查找数量及提升查询速度插图1

DNS的工作原理

当您浏览网站时,必须在下载任何内容之前为请求的每个域进行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上的查找。所以你可以看到这会如何随着时间的推移而累加。

如何减少DNS查找数量及提升查询速度插图2

Pingdom中的DNS查找

当您通过Pingdom多次运行您的网站时,它会缓存DNS,因为它已经知道IP信息并且不必再次执行查找。这就是为什么您的网站在通过Pingdom多次运行后显示速度更快的原因之一。正如您在下面的屏幕中看到的,在第二个测试中,CDN URL上的DNS查找时间为0毫秒。这是很多人误解的一个领域。但别担心,我们将在下面深入研究DNS缓存。

如何减少DNS查找数量及提升查询速度插图3

Pingdom中的DNS缓存

GTmetrix中的DNS查找

每个网站速度测试工具的工作方式略有不同,但几乎所有工具都会为您计算DNS查找时间。以下是相同请求在GTmetrix中的显示方式。DNS用绿色条表示,以毫秒为单位。

如何减少DNS查找数量及提升查询速度插图4

GTmetrix中的DNS查找

WebPagetest中的DNS查找

这是一个使用WebPageTest的示例。他们实际上对您的请求详细信息有一个快速概览,您可以在其中单击“DNS查找”列并按最高响应时间对其进行排序。我们以通过该工具运行usatoday.com为例,仅DNS查找时间就花了6.5秒!

由于所有的外部请求,许多这些新闻网站没有被高度优化是很常见的。但是正如您所看到的,他们站点上的DNS查找时间可能比大多数人的整个站点花费的时间更长。这就是DNS很重要的原因。

如何减少DNS查找数量及提升查询速度插图5

较长的DNS查找时间(网页测试)

如何减少和加速DNS查找

既然您对DNS的工作原理有了更多的了解,我们将向您展示一些关于如何减少DNS查找并在您的WordPress站点上加快查找速度的建议。在某些网站速度测试工具中,这有时也称为“最小化DNS查找”。

如何减少DNS查找数量及提升查询速度插图6

最小化Pingdom中的DNS查找

技巧 1 – 使用快速DNS提供商

重要的是要了解,就像托管一样,有越来越快的DNS提供商。这应该是您修复的第一件事。

通常,GoDaddy和Namecheap等域注册商提供的免费DNS速度非常慢。DNS提供商通常像CDN一样工作,他们在全球拥有多个POP。大型DNS提供商,如Amazon、Cloudflare、Dyn和DNS Made Easy,都拥有专门为具有低延迟环境的DNS设计的庞大基础设施。

我们进行了一些测试来比较一些流行的DNS提供商的速度。我们使用了KeyCDN的性能工具以及SolveDNS的速度测试,取了平均值。速度是从全球多个地点测量的。如您所见,除了Cloudflare,免费DNS提供商的速度肯定较慢。这就是为什么如果您认真对待您的业务和网站,我们强烈建议您使用优质DNS提供商。

如何减少DNS查找数量及提升查询速度插图7

DNS提供商速度

上述某些提供商在某些地区也比其他提供商更快,因此确定您需要快速DNS查找时间的区域(区域或全球)非常重要。 DNSPerf是另一种较新的DNS速度比较工具,您可以在选择提供商时使用。您知道吗,您也可以使用Cloudflare的DNS而无需其CDN功能?

技巧 2 – 更改TTL值以利用DNS缓存

值得庆幸的是,就像我们上面提到的,由于DNS缓存,您不必担心在每个页面加载时都会发生查找。这真的是关于第一次请求。DNS缓存的工作方式与缓存WordPress站点的方式类似。DNS从缓存中提供,直到它过期(这是刷新DNS缓存的方法)。DNS缓存的长度由他们所谓的生存时间 (TTL) 值决定。TTL越高,浏览器执行另一次DNS查找的可能性就越小。

可以通过您的域注册商或第3方DNS提供商更改TTL值,以改善您的 DNS 缓存时间。需要注意的是,ISP也会缓存DNS。下面是一些常见的TTL值。

  • 300 秒= 5 分钟
  • 1800 秒= 30 分钟
  • 3600 秒= 1 小时
  • 43200 秒= 12 小时
  • 86400 秒= 24 小时

如何减少DNS查找数量及提升查询速度插图8

Cloudflare TTL

30分钟到一个小时通常是最常用的TTL值。但是,有些还将其TTL设置得非常低以允许快速更新。Cloudflare是一个示例,如果您使用其自动TTL,则默认为5分钟。查看不同类型的DNS记录并根据它们更改的频率相应地设置它们也很有用。下面是一个例子:

  • A和AAAA记录:更频繁地更改,从5分钟到一个小时通常都可以
  • CNAME记录:几乎从不改变,更高的TTL(如24小时)通常是可以的
  • NS记录:几乎从不改变,更高的TTL,如24小时通常是可以的
  • 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查找数量及提升查询速度插图9

查找较长的DNS查找时间

在这种情况下,您或许可以查看其他提供商,例如Hotjar,它们提供相同的服务,但可能正在使用更快的DNS提供商。在向WordPress站点添加外部服务时,评估其性能非常重要。

技巧 5 – 在CDN上移动和托管资源

减少DNS查找的最简单方法之一是将尽可能多的资源转移到CDN提供商。如果您通过Pingdom运行您的站点,您可以按域查看请求总数。正如您在此示例中看到的,93.8%的请求都指向CDN URL。有一个请求给主机,一个请求给Google Analytics。通过将尽可能多的资源移动到CDN,这减少了涉及的DNS查找次数,从而减少了加载时间。

如何减少DNS查找数量及提升查询速度插图10

按域请求

当然,现在并不总是可以将所有内容都移动到您的CDN。总会有一些外部资源或服务需要您从他们的服务器加载它们。但我们建议您浏览您的网站。很多时候,我们看到WordPress用户有很多资源没有正确托管在他们的CDN上。通过这样做,您还可以更好地利用HTTP/2和并行化。以下是我们经常看到的一些可以改进的资源:

Font Awesome

我们偶尔会在WordPress网站上看到插件开发人员和主题包括Font Awesome,但有时会以这样的方式将它排入队列,默认情况下,像CDN启用程序这样的插件将无法捕获它。在这种情况下,我们建议与开发人员联系,询问他们如何从CDN加载它。

Font Awesome的另一个常见情况是它有时从默认的BootstrapCDN (MaxCDN)加载。虽然这没有任何问题,但它添加了另一个您不需要的DNS查找。在大多数情况下,从您自己的CDN加载Font Awesome会更好,这样就不会再进行查找了。

Gravatar

如果您使用WordPress原生评论,您可能需要额外查找secure.gravatar.com以加载gravatars。一种简单的解决方案是使用延迟加载评论插件。虽然这不会减少DNS查找,但会延迟它直到用户向下滚动页面。因此,从某种意义上说,您正在减少首页加载时的DNS查找。请务必查看我们的博客文章,了解其他加快评论速度的方法。

谷歌字体

使用Google Fonts,您有一个额外的DNS请求来查找fonts.googleapis.com以获取CSS文件。然后,您可以向fonts.gstatic.com发出其他请求以下载字体文件。当您在本地托管所有请求时,所有请求都来自同一个域或CDN,并且很可能您不需要另一个CSS文件,因为它将在您的WordPress主题的CSS文件中。这样做有利有弊,但请查看我们关于如何在本地托管字体的深入文章。

如何减少DNS查找数量及提升查询速度插图11

谷歌字体DNS查找

Font Awesome、Gravatars和Google Fonts只是通过确保它们从CDN加载来减少DNS查找的几个示例。您目前是否正在从CDN加载所有可能的内容?看看总是好的。

技巧 6 – 利用DNS预取

另一个加速DNS的技巧是使用DNS预取。这允许浏览器在后台在页面上执行DNS查找。您可以通过在WordPress网站的Header中添加一些代码行来实现。请参阅下面的一些示例。


除iOS Safari、Opera Mini和Android浏览器外,所有主要浏览器也支持DNS预取 。

如何减少DNS查找数量及提升查询速度插图12

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才能在首屏呈现。Async JavaScript也与Autooptimize插件完全兼容。

如何减少DNS查找数量及提升查询速度插图13

在WordPress中推迟JavaScript

请务必查看我们关于如何消除阻塞渲染的JavaScript和CSS的深入文章。

技巧 8 – 利用ANAME记录和CNAME Flatten

还有来自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

ANAME

ANSWER SECTION:
www.domain.com. 1799 IN A 192.168.1.2

然而,这并不总是正确的。如果主机名在同一DNS区域中,则可能会在同一请求中检索A记录。

使用Cloudflare的CNAME Flattening

与ANAME记录类似,Cloudflare在区域顶点(或根)为其客户提供自动CNAME Flattening。

小结

DNS通常是那些被忽视的性能因素之一,但如果您不小心,它很容易占整个加载时间的很大一部分。了解DNS的工作原理很重要,那里有越来越快的提供商,以及如何减少查找以加快站点速度。