网站性能优化

1、资源压缩合并

(1)图片:雪碧图

(2)JS、CSS合并:利用项目构建工具webpack、grunt、gulp等。


2、加快渲染

CSS前置

3、减少DOM操作

(1)将DOM节点放入局部变量

(2)内存中操作元素,使用文档片段

document.createDocumentFragment()

PS:这样做的优点是只会触发一次回流

(3)一次性DOM节点生成

通过innerHTML属性一次性生成节点,使用字符串拼接的方式,先生成相应的HTML字符串,再一次性写入innerHTML中。

(4)通过类来修改样式

(5) 使用事件代理


4、减少HTTP请求

(1)keep-Alive模式(持久连接)

每个请求,应答客户和服务器都要新建一个连接,完成后立刻断开,持久连接模式使客户端到浏览器的连接持续有效,后续请求时避免了建立或者重新建立连接。

PS:HTTP1.1版本支持

(2)管线化

在持久连接的前提下,通过将请求一次性打包发出,有效减少HTTP请求。

PS:a)只有GET和HEAD请求可以实现管线化,POST有一定的限制;

        b)初次进行请求时不应该启动管线机制,因为服务器不一定支持HTTP1.1版本。


5、非核心代码异步加载

(1)<script>标签,动态脚本加载

(2)<script defer>

异步加载,后续文档元素和脚本文件同时加载,js脚本的执行要等到文档所有元素加载完后执行

PS:IE只支持defer

(3)<script async>

异步加载,后续文档元素和脚本文件同时加载,加载完后自动执行js脚本。


6、利用浏览器缓存

(1)强缓存

不请求服务器直接读取文件。

HTTP 1.0 采用Expires头指定资源过期时间;

HTTP 1.1 采用Cache-Control指定资源被缓存多久;

(2)协商缓存

向服务器发起请求,如果资源并未更新,response响应码为304,随后从浏览器缓存中下载该文件。

HTTP 1.0 采用Last-ModifiedIf-Modified-Since来指定资源过期时间;

HTTP 1.1 采用E-TagIf-None-Match来确定该资源是否过期;


7、使用CDN加速资源

在页面第一次打开时缓存没有作用,使用CDN可以加速资源。


8、DNS预解析

(1)页面中所有a标签在浏览器中默认打开dns,如果页面为https,很多浏览器默认关闭dns,使用标签强制打开dns:

<meta http-equiv="x-dns-prefetch" href=" ">

(2)预解析

<link rel="dns-prefetch" href=" ">