《高性能网站建设指南》笔记

来源:本站原创 Linux 超过1,513 views围观 0条评论

高性能网站建设指南?认识HTTP网站加速前段性能黄金法则:
只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余的80%-90%时间花在了下载页面的所有组件上。
认识HTTP
HTTP是一种客户端/服务器协议,由请求和响应构成。浏览器向一个特定的URL发送HTTP请求,URL对应的宿主服务器发回HTTP响应。该协议使用简单的纯文本格式。
请求类型有GET,POST,HEAD,PUT,DELETE,OPTIONS和TRACE。
最常见的请求GET.以后可能会使用其他的请求类型,请参考REST架构。
GET请求包含一个URL,然后是头文件。HTTP响应包含状态码、头和响应体。
一个HTTP头:

浏览器
=====>
GET /us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b2.js
HTTP 1.1
Host:us.js2.yimg.com
User-Agent:Mozila/5.0(…)Gecko/20061206 Firefox/1.5.09

服务器
<========
HTTP 1.1 200 OK
Content-Type: application/x-javascript
Last-Modified: Wed, 22 Feb 2006 04:15:54 GMT
Content-Length:355
……………………

压缩
如果浏览器和服务器都支持压缩的话,可以使用压缩来减少响应的大小。
浏览器可以使用Accept-Encoding 头来声明它支持压缩。
服务器使用Content-Encoding头来确定响应已被压缩。

浏览器
=====>
GET /us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b2.js
HTTP 1.1
Host:us.js2.yimg.com
User-Agent:Mozila/5.0(…)Gecko/20061206 Firefox/1.5.09
Accept-Encoding: gzip,deflate

服务器
<========
HTTP 1.1 200 OK
Content-Type: application/x-javascript
Last-Modified: Wed, 22 Feb 2006 04:15:54 GMT
Content-Length:355
Content-Encodeing: gzip
……压缩后的代码


条件GET请求

如果浏览器在起缓存中保留了组件的一个副本,但并不确定它是否有效,就会生成一个条件GET请求。
如果确定缓存的副本有效,浏览器就可以使用缓存中的副本,这会得到一个更小的响应和更好的用户体现。
根据响应中的Last-Modified头,浏览器可以知道组件的最后的修改时间。浏览器会使用If-Modified-Since头将最后的修改时间发送给服务器。
Expires过期时间
条件GET请求和304响应有助于让页面加载的更快,但仍然需要客户端和服务器进行确认是否需要重新下载。
Expires头通过明确指出浏览器是否可以使用组件的缓存副本来消除这个需求。

服务器
<========
HTTP 1.1 200 OK
Content-Type: application/x-javascript
Last-Modified: Wed, 22 Feb 2006 04:15:54 GMT
Content-Length:355
Expires: Wed, 05 Ict 2016 19:16:20 GTM


Keep-Alive

HTTP构建在TCP协议上。在早期的HTTP的早期实现中,每个HTTP请求都要打开一个socket连接。这样做效率很低,每个页面中存在很多个HTTP连接,在同一服务器会产生多个socket连接,
持久连接Keep-Alive的引入解决了多对一请求服务器导致效率低的问题。
在HTTP 1.1 在默认中是开启的。
高性能网站建设指南 – ?如何减少HTTP请求
CSS Sprites
CSS Sprites就是利用CSS来控制一个图片以“七巧板”的方式展现给用户。
通过合并图片减少HTTP的请求,并且比用图片地图要灵活很多。
使用内容发布网络CDN
如果应用程序web服务器离用户更近,则一个HTTP请求的响应时间将缩短。
另一方面,如果组件的web服务器离用户更近,则多个HTTP请求的响应时间将缩短。
内容发布网络CDN(Content Delivery Network)是一组分布在多个不提那个地理位置的web服务器,用于更多有效地向用户发布内容。在设计web页面的时候,首次访问的响应时间并不是唯一需要考虑的。对于一个用户经常使用的网站,用户会进行很多的HTTP请求,但通过使用一个长久的Expires头,是这些组件可以被缓存。
这会在后面的HTTP页面请求中减少大量的组件请求。
Expires常用在图片,样式表,脚本等静态文件上。
Max-Age 和 mod_expires
Expires可以控制组件的过期时间,需要提及除了Expires头之外的另一种选择。HTTP1.1引入了Cache-Control头克服Expires头限制。因为Expires头使用一个特定的时间,它要求服务器和客户端的时钟严格同步。另外,过期日期需要经常检查,并且一旦未来一天到了,这需要在服务器配置中提供一个新的日期。
换一种方式,Cache-Control使用了Max-Age指令指定组件被缓存多久。它意秒为单位。max-age支持HTTP 1.1
APACHE mode_expires模块可以很方便的修改这些配置参数。
如何修订文件名
如果使用了HTTP的缓存策略,即使在服务器上更新了组件,已经访问过网站的用户也不太可能获取最新的组件。
最有效的觉得方案是修改其所有链接,这样,全新的请求将从原始服务器下载最新的内容。
压缩组件
如果HTTP请求产生的响应包很小,传输时间就会减少,因为只需要将很小的包从服务器传递到客户端。这一效果对国内网络明显。
压缩是减少发送请求的最简单也是最有效的方法,很有很多方式参考,取出HTML和脚本的注释,压缩HTML代码。
用户减少文件体积的文件压缩已经在Email应用和FTP站点中使用了10年,同样的技术也可以用于向浏览器发布压缩的Web页面。
从HTTP1.1开始,Web客户端可以通过HTTP请求的Accept-Encodeing头来标示对压缩的支持。
压缩内容的选择
很多网站学选择压缩HTML文档,压缩脚本和样式表也是非常推崇的,
一般来讲不会对图片和PDF压缩,因为它们已经压缩过了,如果一定要压缩这些文件只会增加CPU的开销。
gzip是典型的压缩方式,是GUN开发的一种免费格式。可以配置APACHE 1.3的mod_gzip模块来压缩选择的内容,在apache 2.x的
mod_deflate
模块来压缩。
如果客户端是通过代理缓存来浏览服务器的资源时,可能会存在问题。
比如,请求的浏览器不支持压缩,但是代理缓存支持压缩,服务器最终反馈回来的代码到用户的浏览器可能无法阅读。
将样式表放在顶部
由于组件通常是按照它们在文档中出现的顺序下载的,从而得到一个加载很快的页面。果真如此吗?
IE仍然是最流行的浏览器,实际产生的页面比原来预想的要慢。
进度指示器有3个主要优势:它们让用户知道系统没有崩溃,只是正在为他或她解决问题;它们指出了用户大概还需要等多久,以便用户能够在漫长的等待中做些其他的事情;
最后,它们能够提供用户一些可以看的东西,使得等待不再那么漫长。
将样式表放在文档的底部会导致在浏览器中阻止内容逐步呈现。为避免当样式变化时重绘页面中的元素,浏览器会组织内容逐步呈现。
将脚本(javascript)放在底部
前面介绍了将样式表放在页面的底部会阻碍页面逐步呈现,以及如何通过将其移至文档的HEAD中来解决这一问题。脚本(外部的javascript文件)会引起类似的问题,
但解决方案恰好相反?-最好将脚本从页面的头部移到底部(如果可以的话)。这样页面既可以逐步呈现,也可以提高下载的并行度。
?1将脚本放在页面越靠下的地方,意味着越多的内容能够逐步呈现。
避免CSS表达式
使用外部javascript和 css
严格从一次访问的角度来讲,所有的组件放在一个HTML下载速度是最快的,这样会减少组件的请求数,
但是考虑到网站的使用频率和服务器的缓存设置,因此可以把css和js打包当做组件放在外部文件中。

 

by NetSeek

文章出自:CCIE那点事 http://www.jdccie.com/ 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。
本文链接:http://www.jdccie.com/?p=1504转载请注明转自CCIE那点事
如果喜欢:点此订阅本站
  • 相关文章
  • 为您推荐
  • 各种观点

暂时还木有人评论,坐等沙发!
发表评论

您必须 [ 登录 ] 才能发表留言!