`

Yahoo!网站性能最佳体验的34条黄金守则——服务器(转)

阅读更多

英文地址:http://developer.yahoo.com/performance/rules.html
中文地址:http://www.dudo.org/article.asp?id=215
      在本系列的第一节中,讲了提高网站性能中网站“内容”有关的10条原则。除了在网站在内容上的改进外,在网站服务器端上也有需要注意和改进的地方,它们包括:

  1. 使用内容分发网络
  2. 为文件头指定Expires或Cache-Control
  3. Gzip压缩文件内容
  4. 配置ETag
  5. 尽早刷新输出缓冲
  6. 使用GET来完成AJAX请求


11、使用内容分发网络

      用户与你网站服务器的接近程度会影响响应时间的长短。把你的网站内容分散到多个、处于不同地域位置的服务器上可以加快下载速度。但是首先我们应该做些什么呢?
      按地域布置网站内容的第一步并不是要尝试重新架构你的网站让他们在分发服务器上正常运行。根据应用的需求来改变网站结构,这可能会包括一些比较复杂的任务,如在服务器间同步Session状态和合并数据库更新等。要想缩短用户和内容服务器的距离,这些架构步骤可能是不可避免的。
      要记住,在终端用户的响应时间中有80%到90%的响应时间用于下载图像、样式表、脚本、Flash等页面内容。这就是网站性能黄金守则。和重新设计你的应用程序架构这样比较困难的任务相比,首先来分布静态内容会更好一点。这不仅会缩短响应时间,而且对于内容分发网络来说它更容易实现。
      内容分发网络(Content Delivery Network,CDN)是由一系列分散到各个不同地理位置上的Web服务器组成的,它提高了网站内容的传输速度。用于向用户传输内容的服务器主要是根据和用户在网络上的靠近程度来指定的。例如,拥有最少网络跳数(network hops)和响应速度最快的服务器会被选定。
      一些大型的网络公司拥有自己的CDN,但是使用像Akamai TechnologiesMirror Image Internet, 或者Limelight Networks这样的CDN服务成本却非常高。对于刚刚起步的企业和个人网站来说,可能没有使用CDN的成本预算,但是随着目标用户群的不断扩大和更加全球化,CDN就是实现快速响应所必需的了。以Yahoo来说,他们转移到CDN上的网站程序静态内容节省了终端用户20%以上的响应时间。使用CDN是一个只需要相对简单地修改代码实现显著改善网站访问速度的方法。

12、为文件头指定Expires或Cache-Control 
      这条守则包括两方面的内容:
对于静态内容:设置文件头过期时间Expires的值为“Never expire”(永不过期)
对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求
      网页内容设计现在越来越丰富,这就意味着页面中要包含更多的脚本、样式表、图片和Flash。第一次访问你页面的用户就意味着进行多次的HTTP请求,但是通过使用Expires文件头就可以使这样内容具有缓存性。它避免了接下来的页面访问中不必要的HTTP请求。Expires文件头经常用于图像文件,但是应该在所有的内容都使用他,包括脚本、样式表和Flash等。
      浏览器(和代理)使用缓存来减少HTTP请求的大小和次数以加快页面访问速度。Web服务器在HTTP响应中使用Expires文件头来告诉客户端内容需要缓存多长时间。下面这个例子是一个较长时间的Expires文件头,它告诉浏览器这个响应直到2010年4月15日才过期。
      Expires: Thu, 15 Apr 2010 20:00:00 GMT 
      如果你使用的是Apache服务器,可以使用ExpiresDefault来设定相对当前日期的过期时间。下面这个例子是使用ExpiresDefault来设定请求时间后10年过期的文件头:
      ExpiresDefault "access plus 10 years" 
      要切记,如果使用了Expires文件头,当页面内容改变时就必须改变内容的文件名。依Yahoo!来说我们经常使用这样的步骤:在内容的文件名中加上版本号,如yahoo_2.0.6.js。
      使用Expires文件头只有会在用户已经访问过你的网站后才会起作用。当用户首次访问你的网站时这对减少HTTP请求次数来说是无效的,因为浏览器的缓存是空的。因此这种方法对于你网站性能的改进情况要依据他们“预缓存”存在时对你页面的点击频率(“预缓存”中已经包含了页面中的所有内容)。Yahoo!建立了一套测量方法,我们发现所有的页面浏览量中有75~85%都有“预缓存”。通过使用Expires文件头,增加了缓存在浏览器中内容的数量,并且可以在用户接下来的请求中再次使用这些内容,这甚至都不需要通过用户发送一个字节的请求。

13、Gzip压缩文件内容
      网络传输中的HTTP请求和应答时间可以通过前端机制得到显著改善。的确,终端用户的带宽、互联网提供者、与对等交换点的靠近程度等都不是网站开发者所能决定的。但是还有其他因素影响着响应时间。通过减小HTTP响应的大小可以节省HTTP响应时间。
      从HTTP/1.1开始,web客户端都默认支持HTTP请求中有Accept-Encoding文件头的压缩格式:   
      Accept-Encoding: gzip, deflate 
      如果web服务器在请求的文件头中检测到上面的代码,就会以客户端列出的方式压缩响应内容。Web服务器把压缩方式通过响应文件头中的Content-Encoding来返回给浏览器。
      Content-Encoding: gzip 
      Gzip是目前最流行也是最有效的压缩方式。这是由GNU项目开发并通过RFC 1952来标准化的。另外仅有的一个压缩格式是deflate,但是它的使用范围有限效果也稍稍逊色。
      Gzip大概可以减少70%的响应规模。目前大约有90%通过浏览器传输的互联网交换支持gzip格式。如果你使用的是Apache,gzip模块配置和你的版本有关:Apache 1.3使用mod_zip,而Apache 2.x使用moflate
      浏览器和代理都会存在这样的问题:浏览器期望收到的和实际接收到的内容会存在不匹配的现象。幸好,这种特殊情况随着旧式浏览器使用量的减少在减少。Apache模块会通过自动添加适当的Vary响应文件头来避免这种状况的出现。
      服务器根据文件类型来选择需要进行gzip压缩的文件,但是这过于限制了可压缩的文件。大多数web服务器会压缩HTML文档。对脚本和样式表进行压缩同样也是值得做的事情,但是很多web服务器都没有这个功能。实际上,压缩任何一个文本类型的响应,包括XML和JSON,都值得的。图像和PDF文件由于已经压缩过了所以不能再进行gzip压缩。如果试图gizp压缩这些文件的话不但会浪费CPU资源还会增加文件的大小。 
      Gzip压缩所有可能的文件类型是减少文件体积增加用户体验的简单方法。

14、配置ETag 
      Entity tags(ETags)(实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制(“实体”就是所说的“内容”,包括图片、脚本、样式表等)。增加ETag为实体的验证提供了一个比使用“last-modified date(上次编辑时间)”更加灵活的机制。Etag是一个识别内容版本号的唯一字符串。唯一的格式限制就是它必须包含在双引号内。原始服务器通过含有ETag文件头的响应指定页面内容的ETag。 
      HTTP/1.1 200 OK
      Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
      ETag: "10c24bc-4ab-457e1c1f"
      Content-Length: 12195
      稍后,如果浏览器要验证一个文件,它会使用If-None-Match文件头来把ETag传回给原始服务器。在这个例子中,如果ETag匹配,就会返回一个304状态码,这就节省了12195字节的响应。      GET /i/yahoo.gif HTTP/1.1
      Host: us.yimg.com
      If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
      If-None-Match: "10c24bc-4ab-457e1c1f"
      HTTP/1.1 304 Not Modified
      ETag的问题在于,它是根据可以辨别网站所在的服务器的具有唯一性的属性来生成的。当浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时ETag就会不匹配,这种情况对于使用服务器组和处理请求的网站来说是非常常见的。默认情况下,Apache和IIS都会把数据嵌入ETag中,这会显著减少多服务器间的文件验证冲突。
      Apache 1.3和2.x中的ETag格式为inode-size-timestamp。即使某个文件在不同的服务器上会处于相同的目录下,文件大小、权限、时间戳等都完全相同,但是在不同服务器上他们的内码也是不同的。 
      IIS 5.0和IIS 6.0处理ETag的机制相似。IIS中的ETag格式为Filetimestamp:ChangeNumber。用ChangeNumber来跟踪IIS配置的改变。网站所用的不同IIS服务器间ChangeNumber也不相同。 不同的服务器上的Apache和IIS即使对于完全相同的内容产生的ETag在也不相同,用户并不会接收到一个小而快的304响应;相反他们会接收一个正常的200响应并下载全部内容。如果你的网站只放在一台服务器上,就不会存在这个问题。但是如果你的网站是架设在多个服务器上,并且使用Apache和IIS产生默认的ETag配置,你的用户获得页面就会相对慢一点,服务器会传输更多的内容,占用更多的带宽,代理也不会有效地缓存你的网站内容。即使你的内容拥有Expires文件头,无论用户什么时候点击“刷新”或者“重载”按钮都会发送相应的GET请求。
      如果你没有使用ETag提供的灵活的验证模式,那么干脆把所有的ETag都去掉会更好。Last-Modified文件头验证是基于内容的时间戳的。去掉ETag文件头会减少响应和下次请求中文件的大小。微软的这篇支持文稿讲述了如何去掉ETag。在Apache中,只需要在配置文件中简单添加下面一行代码就可以了:
      FileETag none

15、尽早刷新输出缓冲
      当用户请求一个页面时,无论如何都会花费200到500毫秒用于后台组织HTML文件。在这期间,浏览器会一直空闲等待数据返回。在PHP中,你可以使用flush()方法,它允许你把已经编译的好的部分HTML响应文件先发送给浏览器,这时浏览器就会可以下载文件中的内容(脚本等)而后台同时处理剩余的HTML页面。这样做的效果会在后台烦恼或者前台较空闲时更加明显。
      输出缓冲应用最好的一个地方就是紧跟在<head />之后,因为HTML的头部分容易生成而且头部往往包含CSS和JavaScript文件,这样浏览器就可以在后台编译剩余HTML的同时并行下载它们。 例子:

      … <!– css, js –>
    </head>
    <?php flush(); ?>
    <body>
      … <!– content –>

为了证明使用这项技术的好处,Yahoo!搜索率先研究并完成了用户测试。

16、使用GET来完成AJAX请求
      Yahoo!Mail团队发现,当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET最为恰当,因为它只需发送一个TCP包(除非你有很多cookie)。IE中URL的最大长度为2K,因此如果你要发送一个超过2K的数据时就不能使用GET了。
      一个有趣的不同就是POST并不像GET那样实际发送数据。根据HTTP规范,GET意味着“获取”数据,因此当你仅仅获取数据时使用GET更加有意义(从语意上讲也是如此),相反,发送并在服务端保存数据时使用POST。

分享到:
评论

相关推荐

    Yahoo!网站性能最佳体验的34条黄金守则

    网站性能最佳体验的34条黄金守则】是Yahoo!的Exceptional Performance团队在深入研究和实践后提出的一套优化Web性能的策略。这些守则旨在提高网站加载速度,提升用户体验,从而增强网站的吸引力和可用性。以下是其中...

    Yahoo!网站性能最佳体验的34条黄金守则__JavaScript和CSS

    网站性能最佳体验的34条黄金守则之JavaScript和CSS优化 #### CSS优化守则 **1. 把样式表置于顶部** - **背景与意义**:这一建议来源于Yahoo!团队对自身网站性能的研究。他们发现在网页加载过程中,如果样式表位于...

    网站页面性能优化的34条黄金守则--雅虎团队经验分享

    ### 网站页面性能优化的34条黄金守则--雅虎团队经验分享 #### 知识点一:减少HTTP请求次数 在网站页面性能优化中,减少HTTP请求次数至关重要。据统计,网页加载时间中大约有80%是由于下载组件(如图片、样式表等)...

    Yahoo!团队实践分享:网站性能优化的34条黄金守则

    【网站性能优化的34条黄金守则】是Yahoo! Exceptional Performance团队经过深入研究和实践总结出的一套提升网页速度的方法。这些守则旨在改善用户体验,减少用户等待时间,从而提高网站的效率和吸引力。以下是其中...

    网站性能优化的34条黄金守则(Yahoo)

    的Exceptional Performance团队通过对Web性能的深入研究,总结出了34条黄金守则,这些守则涵盖了网站内容、服务器、Cookie、CSS、JavaScript、图片以及移动应用等多个方面。以下是对这34条守则中部分内容的详细解释...

    网站性能优化的34条黄金守则

    Yahoo!的Exceptional Performance团队为改善Web性能带杢最佳实践。他们为此迕行了一系列的实验、开収了各种工具、写了大量...可以分为7大类34条。包括内容、服务器、cookie、CSS、JavaScript、图片、秱劢应用等七部分。

    Yahoo!网站最佳体验守则、web优化

    网站最佳体验守则是指导网站开发者和管理员提升网站性能和用户体验的一套准则。这些守则旨在通过内容优化和服务器优化来减少加载时间,提高网页的响应速度,从而让网页浏览变得更为流畅。以下将详细阐述这些关键知识...

    Yahoo!网站性能监测工具Boomerang.zip

    Boomerang就是一小段...雅虎异常性能小组列出了Boomerang可以胜任的监测工作:某个页面可感知的性能表现——考虑的是用户打开页面的那段时间动态页面性能用户带宽组件加载时间网络延迟 标签:Boomerang

    Yahoo网站性能优化的34条规则

    【Yahoo网站性能优化的34条规则】是Yahoo公司提出的一系列关于提升网站性能的实践准则,主要关注如何减少终端用户的加载等待时间,提高用户体验。这些规则覆盖了多个方面,包括减少HTTP请求次数、减少DNS查找次数...

    大型网站性能优化方案

    网站性能最佳体验的34条黄金守则”。这些规则涵盖了从页面设计、开发实践到服务器配置的方方面面,是业界公认的性能优化指南。 1. **避免使用CSS表达式**:它们会在每次页面重绘或布局时计算,影响性能。 2. **减少...

    网站前端的性能优化与测试——内容过期.docx

    的网站性能最佳实践提供评分标准,其中包括设置合适的Expires或Cache-Control头来实现内容缓存。 在前端性能优化的十三条规则中,第三条就是添加Expires头,通过设置HTTP响应头中的Expires字段,告诉浏览器资源何时...

    高性能网站建设指南2 中文版 高性能网站建设指南(中文版)

    高性能网站建设指南 “如果实现了Steve这些建议中的20%,你的站点就能出现戏剧性的变化。有了这本书和YSlow扩展,实在是没有理由再构建出运行速度缓慢的网站了。”  ——Joe Hewitt,Firebu9调试器和Mozilla的DOM...

    前端性能优化(yahoo前端性能团队总结的35条黄金定律)

    前端性能优化 yahoo前端性能团队总结的35条黄金定律。

Global site tag (gtag.js) - Google Analytics