至此可见,减少就是提高性能和扩展性的代名词。虽然许多原则针对的是软件即服务(SaS)的架构,但这个原则考虑的则是客户的浏览器。如果采用浏览器端的调试工具,如Mozilla Firefox I的插件Firebug9,那么在载入应用中的一个页面时,你就会发现有趣的结果。最惹人注意的结果之是页面中大小相近的对象下载的时长却不一样。进一步观察,你会发现在开始下载对象之前,都有一个额外的步骤:DNS查找。
域名服务器(DNS)是因特网或其他采用 TCP/IP协议的网络最重要的基础设施之一。它可以把域名(如www.akfpartners.com)翻译成IP地址(如184.72.236.173),因此常常被比作电话簿。DNS是通过一个分布式数据库系统维护的,该数据库系统的节点是域名服务器。这种分层体系的最顶层是根域名服务器。每个域至少有一个权威的DNS服务器,用于发布关于该域的信息。
采用多层级缓存的方法可以加速把域名翻译为IP地址,缓存可在浏览器、操作系统、因特网服务提供商等各级进行。不过,在现实世界中页面上都有成百上千的对象,许多对象来自于不同的域,下载每个对象的时间虽然微不足道,但是累加起来形成的时间差就会引起客户注意了我们深入讨论如何减少DNS查询之前,首先应该对大多数浏览器如何下载页面有更多的了解。
这并不是说要深入研究浏览器,但是理解基础原理有助于你优化应用的性能和扩展性。几乎所有的Web页面都是由许多不同的对象(图像、Javascript脚本、CSS脚本等)构成的,浏览器利用了这一点,可以同时连接下载多个对象。浏览器限制了对每个服务器或代理的最大同时持续连接数。根据HTTP/1.1RFC规定,这个最大连接数应该设置为2。但是许多浏览器都会忽略这个RFC,把最大连接数设置为6或者更大。在下一个原则中,我们将介绍如何利用这个功能优化页面的下载时间。现在,让我们把重点放在可以分成多个对象,并通过多个连接下载它们的Web页面。
Web页面上的一个或多个对象可能属于不同的域,每个域都需要在缓存或DNS域名服务器中进行DNS查找。
例如,假设一个简单的Web页面具有以下4个对象:
1)包含文本和其他对象相关指令的HTML页面本身;
2)设置布局的CSS文件;
3)设置菜单项的Javascript文件;
4)JPG图像。
HTML文件来自于我们的域(akfpartners.com),但CSS文件和JPG文件来自于子域(static.akfpartners.com)Javascrip文件则是链接到Google(ajax.googleapis.com)的。在这个例子中,测览器首先政御访www.akfnartners.com页面的请求,这就需要对域akfnartners.com进行DNS查找。当把HTML文件下载到浏览器中后,浏览器解析发现需要从static.akfpartners.com下载CSS和JPG文件,这就需要另一次DNS查找。最最后,通过解析发现还需要从另外一个域下载一个外部的Javascript文件。依靠浏览器、操作系统等对DNS缓存的刷新,这些查找花费的时间最多只有几百毫秒。
一个通用的网站建设原则是,页面上的DNS查找越少下载页面的性能越高。但是,把所有对象都放在一个域中也有不利的一面,我们在前面关于最大同时连接数的讨论中就暗示过这一点。
本文地址://www.gogoparty.cc//article/3450.html