并行资源加载与DNS查找速度

时间:2010-07-28 13:53:42

标签: javascript optimization dns

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

有多种方法可以减少使用不同主机名的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。