前言

网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。

作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考

Best Practices for Speeding Up Your Web Site  http://developer.yahoo.com/performance/rules.html

同时,他们还发布了一个相应的测试工具Yslow http://developer.yahoo.com/yslow/

我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。

接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。

准备工作

为了跟随我进行后续的学习,你需要准备如下的开发环境和工具

  1. Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。

    1. https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh

      Technorati Tags: Performance,Web design,ASP.NET

    2. https://addons.mozilla.org/en-US/firefox/addon/yslow/
    3. 你应该对这些浏览器的开发人员工具有所了解,你可以通过按下F12键调出这个工具。
  2. Visaul Studio 2010 SP1 或更高版本,推荐使用Visual Studio 2012
    1. http://www.microsoft.com/visualstudio/eng/downloads
  3. 你需要对ASP.NET的开发基本流程和核心技术有相当的了解,本系列文章很难对基础知识做普及。

本文要讨论的话题

这一篇我和大家讨论第九个原则:Reduce DNS Lookups(减少DNS查找的次数)。

DNS查找是一个较为底层的行为,我们在浏览器中输入某个地址,例如http://www.cnblogs.com ,我们的浏览器要能正确地定位到博客园的服务器之前,就必须对这个域名进行解析,很显然它自己是无法解析的,所以它需要通过一定的机制进行查找,这就是为什么我们通常上网之前需要设置DNS服务器的原因。

查找DNS是需要花费时间的,经验的总结是至少需要20毫秒左右的时间。在此期间,浏览器是无法下载其他任何内容资源的。所以浏览器会想办法对DNS的查找结果进行缓存。而除了浏览器的缓存之外,操作系统(例如Windows)也会对DNS查询的结果做缓存。只不过,由于浏览器使用太过频繁,目前的主流浏览器都使用自己独有的缓存,而不使用操作系统的缓存

  1. IE 中默认情况下对DNS的缓存时间为 30分钟。关于如何配置,可以通过阅读这篇文章了解更多信息。
  • 早期的版本设置为1天,与Windows的设置一致。
  • Windows的DNS缓存,可以通过ipconfig /displaydns 这个命令来查看。

Firefox默认的DNS缓存时间据说为1分钟,如果不满意这个选项,直接修改 network.dnsCacheExpiration 即可。 Google Chrome默认的DNS缓存时间,据我观察也是1分钟,可以通过chrome://net-internals/#dns 这个地址查看。

我们可以看到即便同样为浏览器,它们在缓存DNS的问题上也不尽相同(主要体现在时间上面),这个差异到底有什么考虑呢?

  1. 缓存时间较长,有利于重复利用DNS缓存,提高速度。
  2. 缓存时间较短,有利于及时地检测到目标站点的IP地址更新,以进行正确的访问。

所以,两者都有其优点和考虑。

那么,讲了这么多,了解这个只是对于我们网站设计和优化有何启示呢?

  1. 由于DNS查找是需要时间的,而且它们通常都是只缓存一定的时间,所以应该尽可能地减少DNS查找的次数。
  2. 减少DNS查找次数,最理想的方法就是将所有的内容资源都放在同一个域(Domain)下面,这样访问整个网站就只需要进行一次DNS查找,这样可以提高性能。
  3. 但理想总归是理想,上面的理想做法会带来另外一个问题,就是由于这些资源都在同一个域,而HTTP /1.1 中推荐客户端针对每个域只有一定数量的并行度(它的建议是2),那么就会出现下载资源时的排队现象,这样就会降低性能。
  4. 所以,折衷的做法是:建议在一个网站里面使用至少2个域,但不多于4个域来提供资源。我认为这条建议是很合理的,也值得我们在项目实践中去应用。

我们最后可以来看看博客园主页在这方面的设计

我们看到加载主页的时候,会有47个请求,这些请求分布在不同的主机(HOST),去除重复值之后,有如下11个主机。前5个是与博客园本身有关的,后6个是与广告有关的。

www.cnblogs.com
common.cnblogs.com
static.cnblogs.com
pic.cnitblog.com
passport.cnblogs.com
www.google-analytics.com
partner.googleadservices.com
pubads.g.doubleclick.net
static.googleadsserving.cn
csi.gstatic.com
p4-gg6ayhm2r5hvm-ukushuadvfiqpnzm-if-v6exp3-v4.metric.gstatic.com

转载于:https://www.cnblogs.com/haiyabtx/p/3622714.html

优化网站设计(九):减少DNS查找的次数相关推荐

  1. 优化网站设计:减少DOM元素的数量

    2019独角兽企业重金招聘Python工程师标准>>> 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也 ...

  2. 优化网站设计系列文章总结和导读

    概述 其实想写这方面的文章由来已久,这个系列文章的想法是参照雅虎团队提供的35条性能优化的最佳实践(其实最早的时候是14条),再结合我自己多年的实际工作经验,结合具体的开发平台(ASP.NET),为读 ...

  3. 从减少DNS查找来优化网站

    Internet是通过IP地址来查找服务器的.由于IP地址很难记忆,通常使用包含主机名的URL来取代它,但当浏览器发送其请求时,IP地址仍然是必需的.这时,Domain Name System(DNS ...

  4. 网站加速最佳实践 – 减少DNS查找

    参考: http://developer.yahoo.com/performance/rules.html#dns_lookups DNS 就像电话本,根据电话本查找指定网站的 IP 地址.查找一次 ...

  5. 优化网站设计(三):对资源添加缓存控制

    前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...

  6. 优化网站设计(七):避免在CSS中使用表达式

    前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...

  7. 优化网站性能的35条规则

    最新博客站点:欢迎来访 1. 最小化HTTP请求次数 最终用户响应时间的80%用于前端.大部分时间都在下载页面中的所有组件:图像,样式表,脚本,Flash等.减少组件数量反过来减少了呈现页面所需的HT ...

  8. 优化网站速度的几种方式

    优化网站速度的几种方式 在业界有篇很经典的文章,来源于yahoo的开发者社区,它讲述的是如果优化自己的网站的速度,包括从服务器端到客户端.这篇文章影响了很多人,原文可以参照这里:Best Practi ...

  9. 网站优化-减少DNS查询

    什么是DNS? DNS(Domain Name System)译为 域名系统,它是 Internet 的一项核心服务,可以将域名和IP地址相互映射的一个 分布式数据库 ,能够让你方便的访问互联网.   ...

最新文章

  1. 观察者模式(Observer)
  2. DIV+CSS布局,第五课,DOCTYPE的选择,零起点细说网站制作
  3. 网易java实习面试_2019届网易JAVA实习2面经历
  4. boost::math模块计算艾里函数的零点的测试程序
  5. 【mysql学习】疑问点记录
  6. 《江湖X:汉家江湖》游戏论剑系统技术全解析
  7. mongodb的id的唯一性_mongodb中的objectid是collection中唯一,还是全db唯一,还是全宇宙唯一?...
  8. Ajax — 第五天
  9. Flask实现登录功能【附完整Demo】
  10. POJ NOI0105-44 第n小的质数
  11. 收集java精确截取字符串
  12. 仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话
  13. grandMA2 onPC 3.1.2.5的DMX参数摸索
  14. 英雄联盟查服务器角色信息,LOL英雄联盟角色信息查询
  15. 大胖子走迷宫(蓝桥杯真题)
  16. 如何清理Linux跟下的垃圾文件
  17. iPhone模拟器消失 解决办法
  18. windows服务器443端口被占用---云锁
  19. 【模板】字符串快速读入的函数
  20. 人脸识别相关的数据集汇总

热门文章

  1. krpano html5略缩图边框颜色,krpano加载场景缩略图列表
  2. mySQL无锁队列_使用 MySQL 实现无锁任务队列(using MySQL as a job queue)
  3. 数字图像处理与机器视觉_简单自动智能识别物体程序(机器视觉+数字图像处理)...
  4. 目标跟踪算法的分类(一)
  5. webpack配置_webpack的配置
  6. 嵌入式系统——RS232和RS449
  7. php xml扩展,php-SimpleXML,请不要扩展实体
  8. java设置日历_java – 设置日历实例的时间
  9. pythontkinter使按钮失效_python2.7为什么点击了quot;开始quot;按钮后,tkinter上的按钮,图中红色部分,再也点不动了? - SegmentFault 思否...
  10. kafka 查看消费者组