从浏览器发送请求到渲染页面的大致过程来讨论前端优化
输入网址,解析域名,查询是否有DNS缓存
这阶段前端没有可优化的DNS查询
减少DNS查询次数(减少域名),比如把css、js等静态文件放在同一个域名下建立TCP链接
连接复用、keep-alive,http2.0的多路复用(自行查找资料)发送http请求
减少cookie的大小,合理设置cache-control,可以做到一段时内利用缓存,不发送http请求。浏览器遇到页面有几个css或者js的时候会同时发送多个http请求,这个有限制,比如好像ie对一个域名同时最多发4个请求。所以我们可以增加域名,把css等放cdn,这样同时就能发送8个或16个http请求了。但是这种方式又和第二阶段相冲突,这就需要判断项目的实际情况来权衡,引入静态文件过多,就多准备几个域名。接收响应
运用ETag技术,可以判断出请求或者资源自上次请求后是否改变过,没改变就返回304,让浏览器去请求缓存,还有压缩技术Gzip,资源传输过程中压缩成Gzip格式,浏览器会自动解压,耗费cpu接收完成,返回html
去掉html中的回车、空格、注释等DOCTYPE
不能不写,不能写错。让浏览器自己去猜会影响渲染速度- 逐行解析
看到标签
…
减少标签数量(影响不大) ie 页面先显示内容,再渲染样式;Chrome 等样式渲染完后在显示内容看到css js(下载并行 解析串行,排队挨个解析)
压缩(去掉空格,变量名一个字符)
CDN内容分布网络(主要技术)
css 阻塞看浏览器心情,js是一定会阻塞,所以css放head:尽早下载css,让用户尽早看到页面,js放body后: 尽早显示页面,能获取dom节点,就算js没解析完,按钮点不动,影响也不大