高性能网站建设法则
性能黄金法则只有10%–20%的最终用户时间花在了下载HTML文档上,其余的80%~90%的时间花在了下载页面中的所有组件上
(80%-90%用户的等待时间是来自于前端的页面加载)
1. 减少阻塞次数、减少阻塞时间
1.将CSS放在顶部
2.将JS放在底部
3.删除重复的脚本
4.延迟加载渲染页面不需要的脚本
5.按需异步下载
注:这个规则其实并不影响性能,但是却关乎用户的体验。
如果样式表放在顶部,那么在下列三种情况下,浏览器会出现白屏
1、在新窗口中打开
2、重新加载
3、作为主页
2. 使Ajax可缓存
被动请求(Passive Request)
主动请求(Acitve Request)
3. 减少HTTP请求
性能黄金法则,我们必须减少用户下载html文档的时间,最基本的一个方法是必须减少http请求,包括image,合并CSS和JS文件。将图片编码成Base64数据嵌入网页
4. 避免重定向
在下列几种情况下可能会发生
1. 缺少结尾的斜线
2. 连接网站
3. 跟踪内部流量
4. 跟踪出站流量
5. 美化URL
5. 使用CDN
CDN是一组分布在多个不同地理位置的Web服务器用于更有效的向用户发布内容。
注:如果应用程序的web服务器离用户更近,则1个http请求的响应时间将缩短;如果组件web服务器离用户更近,则多个http请求的响应时间将缩短。同时,我们需要关注CDN Cache.例如修改了某个js文件,需要及时清除CDN Cache,甚至会出现不同步的情况。
6. 减少DNS查找
DNS查找可以被缓存起来以提高性能,通过Keep-Alive和较少的域名来减少DNS查找
7. 使用外部的Javascript和CSS
页面中尽量使用外部的js和css文件,虽然会带来额外的http请求访问时间,但是因为缓存机制会节省后期访问时http的请求。
特殊情况:主页。在主页中尽量将js和css写在页面中,这样会节省主页的访问时间。
两全其美的方式
A加载后下载
在主页加载外币之后,动态加载js和css文件。例如我们的loadJs和loadCss方法。
B 动态内联
可以使用例如cookie的方法,如果js加载过,则写入cookie一个值;动态检测cookie的值,如果不存在则加载,如果存在则跳出加载过程。
8. 精简Javascript,删除重复的脚本
精简:从代码中移除不必要的字符以减少其大小,进而改善加载时间。移除所有的注释和不必要的空白字符
混淆:除了精简,还将函数和变量的名字转换为更短的字符串。
配置Etag(Entity Tag)
9. Etag是Web服务器和浏览器用于确认缓存组件的有效性的一种机制,是唯一标识了一个组件的一个特定版本的字符串.
GET /i/yahoo.gif HTTP1.1
Host: us.yimg.com
HTTP 1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
Etag: “a531782d768ca1:dcc”
Content-Length:1195
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: “a531782d768ca1:dcc”
HTTP 1.1 304 Not Modified
问题:通常使用组件的某些属性来构造它,这些属性对以特定的、寄宿了网站服务器来说是唯一的。另一台不同的服务器发起请求,是不会匹配的。
补充:web前端 , JavaScript ,