1. CSS Sprites 合成图片
优点:减少HTTP请求次数,图片合成后总大小变小,加快加载
缺点:不利于后期修改,每次修改单个图片都要重新合成一次;不利于代码语义化
折中:按照使用频率、功能类型的不同合成几个级别不同的图片
2. 合并css, js文件
优点:减少HTTP请求次数,加快加载
缺点:牺牲了代码组织结构,使单个文件内部混乱
折中:适当分开,尽量合并
3. 压缩文件大小
代码文件:用压缩工具压缩,去掉空白、无用、重复代码; 图片文件:降低分辨率、改变格式(PNG优先)、压缩图片质量等,也可以使用专业的压缩工具
优点:缩小体积,加快加载
缺点:没有明显缺点,如果一定要说的话,压缩后的代码可读性差(不过一般都会留一份压缩前的源码)
4. 结构(HTML)样式(CSS)行为(JS)分离
优点:
- 使项目结构更清晰,易于维护,易于对各部分进行单独的处理而不影响其他部分。
- 提高代码可复用性
- 浏览器会单独缓存css, js文件,加快加载
缺点:有缺点吗?对了,demo之类的小项目可以不用分离了,多此一举
5. CSS放在页面开头(<head>
内部),JS放在页面末尾(</body>
之前)
DOM树的生成是受JS代码执行的影响的,JS代码会“阻塞”页面的渲染,详细请读《JavaScript权威指南》(P320-P322)
6. 使用CDN(内容发布网络)
优点:CDN会帮你找到距离用户电脑最近的服务器上的资源文件,更够更快速地传到相应的浏览器上。
缺点:
- 不利于离线开发,也无法对远程的资源进行控制(比如添加一些自定义的修改)
- 有些CDN服务在某些国家和地区无法访问,比如在天朝访问使用了google cdn的网站时就会出现很多问题
7. 尽量减少浏览器reflow
这里设计关于Reflow和Repaint的知识。Reflow简单来讲就是浏览器重新渲染页面布局,这可能是由于一个很小的节点的改变引发的,作用很小,代价很大,所以应尽量避免。
措施:
- 减小不必要的DOM树深度,也就是说,不必要的话,你的DOM树不要太多层了,其中一层的布局变化将引起整棵树的重新渲染。
- 尽量使用对class进行操作来动态改变元素样式,而不是直接对元素css进行更改。
- 需要使用动画的元素应将其
position
设置为absolute
或者fixed
,使其脱离文档流。 - 避免过于复杂的css选择器,尤其要避免使用过多后代选择器,太多层CPU开销很大。
- 不要用表格进行页面布局,表格式牵一发动全身的布局方式。
- 不要用css表达式
8. 使用<link>
,避免使用@import
加载css
优点:@import的css文件无法同步并行加载,必须等一个加载完才能加载下一个,势必造成速度问题,而link引用的多个stylesheet则可以同步并行加载,速度更快
缺点:暂时没想到