DNS用于映射主机名和IP地址。当在浏览器中键入www.xxx.com,浏览器发启的DNS解析请求会返回服务器的IP地址。DNS解析有代价,一般一次解析需要20~120毫秒。浏览器在DNS查询完成前不会下载任何东西。这就是DNS次数影响网站性能的原因,查询次数所需的时间越多,打开页面的时间就越长。
而浏览器会想办法对DNS的查找结果进行缓存。而除了浏览器的缓存之外,操作系统(例如Windows)也会对DNS查询的结果做缓存。
1. IE 中默认情况下对DNS的缓存时间为 30分钟。
Windows的DNS缓存,可以通过ipconfig /displaydns 这个命令来查看。
2. Firefox默认的DNS缓存时间据说为1分钟,如果不满意这个选项,直接修改 network.dnsCacheExpiration 即可。
3. Google Chrome默认的DNS缓存时间,据我观察也是1分钟,可以通过chrome://net-internals/#dns 这个地址查看。
当客户端的DNS缓存为空时(浏览器与操作系统),DNS查询的次数等同于网页中各域名的个数。包括该网页URL、图片、脚本文件、样式表、FLASH对象等使用的域名。减少域名数量可以减少DNS查询次数。
虽然减少域名主机可减少DNS查询的次数,但可能造成并行下载数的减少。避免 DNS查询可减少响应时间,而减少并行下载数可能增加响应时间。
综合下来,得出以下总结:
1. 由于DNS查找是需要时间的,而且它们通常都是只缓存一定的时间,所以应该尽可能地减少DNS查找的次数。
2. 减少DNS查找次数,最理想的方法就是将所有的内容资源都放在同一个域(Domain)下面,这样访问整个网站就只需要进行一次DNS查找,这样可以提高性能。
3. 但理想总归是理想,上面的理想做法会带来另外一个问题,就是由于这些资源都在同一个域,而HTTP /1.1 中推荐客户端针对每个域只有一定数量的并行度(它的建议是2),那么就会出现下载资源时的排队现象,这样就会降低性能。
所以,折衷的做法是:建议在一个网站里面使用至少2个域,但不多于4个域来提供资源。
|
|