【问题标题】:Parallelized resource loading vs DNS lookup speed并行资源加载与 DNS 查找速度
【发布时间】:2010-08-01 18:43:31
【问题描述】:

一种减少页面加载时间的常用技术是通过从不同的主机名检索多个静态资源下载(即使它们都解析到同一服务器)来并行下载它们。
但是,浏览器需要为每个主机名发出 DNS 查找请求,这可能需要很长时间。
您能否提出一种方法,使用该方法 JavaScript 代码可以动态确定用于并行下载资源的最佳主机名数量?

【问题讨论】:

  • DNS 条目将在第一次之后被缓存,所以这不是问题。这里的意图是绕过网络服务器对同时连接的限制吗?
  • 完全正确(绕过它会导致页面加载速度更快)

标签: javascript optimization dns


【解决方案1】:

第一次解析给定的 DNS 名称后,该名称应由离用户非常近的解析器缓存。因此,如果您想获得更多并行连接,请不要使用完全随机的、现成的服务器;使用一组一致的五个左右不同的主机。 DNS 加载只会在用户第一次访问您的网站时发生(或者,即使在那时,共享相同缓存解析器的人已经在那里),并且会与您的网页正文的下载同时发生。

JavaScript 无法确定“最佳”数字,因为它不知道 DNS 查询在发出它们之前需要多长时间。

【讨论】:

    【解决方案2】:

    有多种方法可以减少使用不同主机名的 DNS 加载时间。一个技巧是在 DNS 响应的 AR 部分中包含其他主机名;例如,如果有人询问 a.example.com,我们可以帮助他们告诉他们 b.example.com、c.example.com、d.example.com 等的 DNS 主机名,作为 DNS 回复中的附加记录,在答案中为他们提供 a.example.com 的 IP 时。

    这将使用一些但不是全部的递归 DNS 服务器预先缓存所有其他主机名的答案(出于安全原因,此技巧不适用于我已实现的任何递归 DNS 服务器,因为,出于安全原因,他们不会盲目地在 DNS 回复的 AR 部分缓存记录)。

    另一个减少 DNS 查找的技巧是将所有名称都放在同一个域中(所有名称都以 example.com 结尾:a.example.com、b.example.com 等),确保不需要遵循无胶记录来解析名称(使您的 NS 记录具有类似 ns1.example.com 和 ns2.example.com 的名称,并且不要使用任何 CNAME 条目),并且,如果您的服务器没有经常更改 IP,为您的服务器的 DNS 条目设置较大的 TTL。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多