服务器代码优化

来源:互联网 发布:单片机课后题答案 编辑:程序博客网 时间:2024/06/05 07:57

1、使用内容分发网络 

内容分发网络(Content Delivery Network, CDN)是由一系列分散到各个不同地理位置上的Web服务器组成的,它提高了网站内容的传输速度,用于向用户传输内容的服务器主要是根据和用户在网络上的靠近程度来指定的。例如,拥有最少网络跳数(nctwork hops)和响应速度最快的服务器会被选定。

用户与网站服务器的接近程度会影响响应时间的长短,把网站内容分散到多个、 处于不同地域位置的服务器上可以加快下裁速度, 但是首先我们应该做些什么呢?

在终端用户的响应时间中有80%到90%的响应时间用于下载图像、样式表、脚本、 Flash等页面内容,与其重新设计应用程序架构这种困难的任务,不如先来分布静态内容会更好一点。这不仅会缩短响应时间, 而且对于内容分发网络来说它更容易实现。

2、为文件头指定Expires或Cache-Control 

这条守则包括两方面的内容:

对于静态内容:设置文件头过期时间Expires的值为“Never expire”(永不过期)。

对于动态内容:使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求。

网页内容设计现在越来趣丰富,这就意味着页面中要包含更多的脚本、样式表、图片和Flash,第一次访同你页面的用户就意味着进行多次的HTTP请求,但是通过使用Expires文件头就可以使这样内容具有缓存性, 避免了接下来的页面访问中不必要的HTTP请求。

浏览器 (和代理) 使用缓存来减少HTTP请求的大小和次数以加快页面访问速度, Wcb服务器在HTTP响应中使用Expircs文件头来告诉客户端内容需要缓存多长时间。

3、Gzip圧缩文件内容 

终端用户的带宽、互联网提供者与对等交换点的靠近程度等都不是网站开发者所能决定的,但是通过减小HTTP响应的大小可以节省HTTP响应时间。

从HTTP/1. 1开始, web客户端都默认支持HTTP请求中有Accept-Encoding文件头的压缩格式:

Accept-Encoding: gzip, deflate

如果web服务器在请求的文件头中检测到上面的代码, 就会以客户端列出的方式压缩响应内容, Web服务器把压缩方式通过响应文件头中的Content- Encoding 来返回给浏览器。

Content-Encoding: gzip

Gzip是目前最流行也是最有效的压缩方式,另外一个是deflate,但是它的使用范围有限效果也稍稍逊色.

4、 尽早刷新输出缓冲 

当用户请求一个页面时,无论如何都会花费200到500毫秒用于后台组织HTML文件,在这期间,浏览器会一直空闲等待数掘返回。在PHP中,可以使用

Flush()方法,它允许把己经编译的好的部分HTML响应文件先发送给浏览器,这时浏览器就会可以下载文件中的内容(脚本等)而后台同时处理剩余的 HTML页面。

输出缓冲应用最好的一个地方就是紧跟在<head/>之后, 因为HTML的头部分容易生成而且头部往往包含CSS和JavaScript文件, 这样浏览器就可以在后台编译剩余HTML的同时并行下载它们。

5、使用GET来完成AJAX请求

当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET最为恰当,因为它只需发送一个TCP包(除非你有很多cookie) ,IE中URL的最大长度为2K,因此如果你要发送一个超过2K的数据时就不能使用GET了。

POST并不像GET那样实际发送数据,根据HTTP规范, GET意味着“获取”数据。因此当你仅仅获取数据时使用GET更加有意义。相反、发送并在服务端保存数据时使用POST。

6、 避免空的图像来源

一个src属性为空串的图像有两种情况:

1.  直接的HTML

<img src=””/>

2.  JavaScript

var img= new Image();

img.src=””;

这两种情况都会引起同样的效果:浏览器会再次向你的服务器发出请求。

这个行为为何是不好的?

1、发送大量突然的请求将使你的服务器宕机(死机) ,尤其是每天有数以万访同量的页面。

2、产生一个从未浏览过的页面将浪费服务器的计算周期(computing cycles)

3、损坏用户数据,如果你在请求中追踪状态(以cookie或是其他的方式) ,你可能会损坏数据,即使这个图像请求并没有返回一个图像。