高性能网站进阶指南 笔记
1、优化循环远远比优化只执行一次的代码好得多;
2、DOM API效率低下,运行程序最大开销往往是DOM而不是Javascript;
3、当我们做性能优化时,不要浪费时间去尝试为那些不消耗大量时间的代码提速。评估优先,拒绝任何不能提供良好效益的优化;
4、浏览器在执行页面的Javascript期间无法响应其他的用户事件。因此,尽可能快地执行完页面中所有的Javascript是极其重要的,否则网页和浏览器本身可能变得非常缓慢甚至完全冻结;
5、webwork有助于提升浏览器的使用效率,将一些复杂运算放到后台计算,将串行变为并行;
6、在页面加载时,通过控制Javascript的函数数量加载量可以加快网页的初始化速度。(指在onload事件执行之前的下载量);
7、几种下载外部脚本且不被阻塞的技术:
XHR Eval通过XMLHttpRequest从服务器端获取脚本,响应完成时通过eval执行内容。缺陷:不能跨域。XHR 注入通过XMLHttpRequest从服务器端获取脚本,响应完成时通过创建script元素注入其中执行内容。缺陷:不能跨域。Script in Iframe通过iframe的src属性加载脚本。Script DOM Element通过创建script标签元素来加载脚本。Script DeferIE特有document.write Script Tag通过把script标签代码用write方法放到页面中加载脚本。
8、浏览器忙指示器
图片丢失
9、脚本下载技术最佳方案决策树
![](http://images0.cnblogs.com/blog/331214/201308/28191113-415dae634c554f01af1d8d9d31241f6d.png)
10、解决异步脚本按顺序执行的办法
硬编码回调
window onload
定时器轮询
script onload(首选)
11、样式表的下载会阻塞行内脚本
解决方案:调整行内脚本的位置,使其不出现在样式表和任何其他资源之间。
12、http协议 chunked状态码
一般情况HTTP的Header包含Content-Length域来指明报文体的长度。如:
有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用chunked编码。
在进行Chunked编码传输时,在回复消息的Headers有transfer-coding域值为chunked,表示将用chunked编码传输内容。使用chunked编码的Headers如下(可以利用FireFox的FireBug插件或HttpWatch查看Headers信息,HttpWatch还可以查看chunked的个数):
chunked采用以下方式编码:
Chunked-Body=*chunk
"0"CRLF
footer
CRLF
chunk=chunk-size[chunk-ext]CRLF
chunk-dataCRLF
hex-no-zero=<HEXexcluding"0">
chunk-size=hex-no-zero*HEX
chunk-ext=*(";"chunk-ext-name["="chunk-ext-value])
chunk-ext-name=token
chunk-ext-val=tokenquoted-string
chunk-data=chunk-size(OCTET)
footer=*entity-header
编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度和长度单位(一般不写),第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些没有写的头部内容。
13、gzip压缩原理:通过添加Accept-Encoding HTTP头来向Web服务器声明支持压缩:Accept-Encoding:gzip,deflate,当请求中包含这个头时,web服务器就会开启Gzip压缩功能。Web服务器会返回一个经过压缩的响应,并且用Content-Encoding头做标记:Content-Encoding:gzip。
14、可以通过事件委托来减少事件的绑定从而减少文件的大小。
15、图片压缩技术
16、可以使用多个域来下载静态资源,提高网页加载速度。特别是一些静态资源很多的网站。
17、如今大多数Web客户端和服务器端都使用HTTP/1.1,但也继续支持HTTP/1.0。在使用HTTP1.1时,许多浏览器遵循HTTP/1.1 RFC中的建议,限制每个服务端两个连接。然而当使用HTTP/1.0时,IE6和7可以打开更多的连接,通常增加到4个。类似的,FF增加到8个。降级到http 1.0可以加快并行下载速度,但是代价是放弃长连接。
18、少用iframe,iframe是开销最大的DOM元素。
19、高效css选择符使用