如何对网站的文件和资源进行优化?
减少HTTP请求
- 请求的网页文件中有很多图片、CSS、JS甚至音乐等信息时,将会频繁的与服务器建立连接,与释放连接,这必定会造成资源的浪费,且每个HTTP请求都会对服务器和浏览器产生性能负担。
- 网速相同的条件下,下载一个100KB的图片比下载两个50KB的图片要快。所以,请减少HTTP请求。合并图片(css sprites),合并CSS和JS文件;图片较多的页面也可以使用 lazyLoad 等技术进行优化。
正确理解 重绘和重排
- 重绘就是在一个元素的外观被改变,但没有改变布局(宽高)的情况下发生,如改变visibility、outline、背景色等等。
- 重排就是DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受到影响的部分失效,浏览器会验证DOM树上的所有其它结点的visibility属性。如:改变窗囗大小、改变文字大小、内容的改变、浏览器窗口变化,style属性的改变等等。
- 通过设置style属性改变结点样式的话,每设置一次都会导致一次reflow,所以最好通过设置class的方式; 有动画效果的元素,它的position属性应当设为fixed或absolute,这样不会影响其它元素的布局;如果功能需求上不能设置position为fixed或absolute,那么就权衡速度的平滑性。
减少对DOM的操作
使用JSON格式来进行数据交换
- JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。
- JSON是 JavaScript原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。
- 与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。
高效使用HTML标签和CSS样式
压缩CSS、JavaScript和HTML文件
使用CDN加速(内容分发网络)
将CSS和JS放到外部文件中引用,CSS放头,JS放尾
- 浏览器在执行JavaScript代码时,不能同时做其它事情,即script标签每次出现都会让页面等待脚本的解析和执行(不论JavaScript是内嵌的还是外链的),JavaScript代码执行完成后,才继续渲染页面。这个也就是JavaScript的阻塞特性。
- 因为这个阻塞的特点,建议把JavaScript代码放到body结束标签以前,这样既能有效的防止JavaScript的阻塞,又能使得页面的HTML结构能更快的释放。
- HTML规范清楚指出CSS要放包含在页面的head标签区域内