首页 > 网站 > WEB开发 > 正文

网站前端性能优化总结

2024-04-27 14:40:51
字体:
来源:转载
供稿:网友

一、服务器侧优化

1.添加ExpiresCache-Control信息头

某些经常使用到、并且不会经常做改动的图片(banner、logo等等)、静态文件(登录首页、说明文档等)可以设置较长的有效期(expiration date),这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。

各个容器都有针对的方案,,以Apache为例:

ExpiresActive On

ExpiresByType image/gif "accessplus 1 weeks"

表示gif文件缓存一周,配置可以根据具体的业务进行调整,具体配置可以参考:

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_expires.html

2.压缩内容

对于绝大多数站点,这都是必要的一步,能有效减轻网络流量压力。

<ifmodule mod_deflate.c>
DeflateComPRessionLevel 9

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php

AddOutputFilter DEFLATE html htm xml php CSS js
</ifmodule>

表示zlib在压缩时可以最大程度的使用内存,压缩html、文本、xml和php这几种类型的文件,指定扩展名为html、htm、xml、php、css和js的文件启用压缩。

具体配置可以参考:

http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_deflate.html

3.设置Etags

在使用etags之前,有必要复习一下RFC2068中规定的返回值200和304的含义:

200--OK

304--Not Modified

客户端在请求一份文件的时候,服务端会检查客户端是否存在该文件,如果客户端不存在该文件,则下载该文件并返回200;如果客户端存在该文件并且该文件在规定期限内没有被修改(InodeMTimeSize,则服务端只返回一个304,并不返回资源内容,客户端将会使用之前的缓存文件。而etags就是判断该文件是否被修改的记号,与服务器端的资源一一关联,所以etags对于CGI类型的页面缓存尤其有用。

下图是优化前的首页:(注意,此时没有压缩首页图片,即使使用了缓存,仍需要5s左右的时间)

网站前端性能优化总结 三联教程

化前的某页面

需要注意的是,使用etags会增加服务器端的负载,在实际应用中需要自行平衡。

二、Cookie优化

1.减小Cookie体积
HTTP coockie可以用于权限验证和个性化身份等多种用途。coockie内的有关信息是通过HTTP文件头来在web服务器和浏览器之间进行交流的。因此保持coockie尽可能的小以减少用户的响应时间十分重要。

l使cookie体积尽量小;

l在合适的子域名上设置bookie,以免影响其他子域名下的响应;

l设置合理的过期时间,去掉不必要的cookie。

下面对比一下各个网站的cookie:


图片

图中可以看出,6K的cookie显然是不必要的

2.对于页面内容使用无coockie域名

当浏览器在请求中同时请求一张静态的图片和发送coockie时,服务器对于这些coockie不会做任何地使用。因此他们只是因为某些负面因素而创建的 网络传输。所有你应该确定对于静态内容的请求是无coockie的请求。创建一个子域名并用他来存放所有静态内容。

例如,域名是www.example.org,则可以考虑可以在static.example.org上存在静态内容。但是,如果不是在www.example.org上而是在顶级域名example.org设置了coockie,那么所有对于static.example.org的请求 都包含coockie。在这种情况下,可以考虑重新购买一个新的域名来存在静态内容,并且要保持这个域名是无coockie的。例如,t.QQ.com使用的是qpic.cn,weibo.com使用的是sinaimg.cn,xiaonei.com使用的是hdn.xnimg.cn等等。

性能方面的考虑还有使用带有www的子域名并且在它上面设置coockie,因为忽略www会把cookie设置到*.example.com上去,使cookie带有一些不必要的信息。

三、java SCRipT和CSS优化

1.CSS放到代码页上端

这么做可以避免浏览器在解释一次之后,使用css进行第二次解释,因为用户对css裸奔日效果根本就不感兴趣。


图片

css裸奔节效果图(来源:网络)

2.避免CSS表达式

凡是只有IE能用的东西,都不是好东西。

3.从页面中剥离JavascriptCSS

剥离后,能够有针对性的对其进行单独的处理策略,比如压缩或者缓存策略。


图片

(css已经剥离,但js嵌入到html里面了,并且放在了html的上部,所以这货是正面+反面教材)

4.精简JavaScriptCSS

语法能简写话尽量简写。



图片

(相同表现的类合并)

5.使用<link>而不是@importChoose <link> over @import

在IE中@import指令等同于把link标记写在HTML的底部,这与第一条相违背。

6.避免使用CSSFilter

尽量使用png格式的图片来代替滤镜效果,因为开启滤镜会加大浏览器的开销。

7. JS尽量放到页面最下端

当一个脚本在下载的时候,浏览器会卡住,无法响应其他请求。所以,可以将功能性的JS放到最后端去处理。

8.页面展现尽量交给CSS完成

曾经见过一个JS+CSS写出来的下拉框,如图:


图片

实现原理是JS获取页面的每一个select元素和其对应的属性,然后用js重新画出新的样式效果:



图片

多出的这部分JS执行过程会降低客户端的性能,所以最终没有采用这个select样式。

四、图片优化

1.优化图片

尽可能的使用PNG格式的图片,因为和GIF相比,PNG有更多的功能和更小的体积,而且未来PNG会加入动画效果:


图片
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表