从渲染角度
css
- css放在head里面,边加载变成成css树
 - 尽量避免css层级过多,因为生成css树很复杂很耗时
 - 对于不是首屏需要的css可以采用懒加载的方式,prefectch配合as一起使用
 - css选择器是从右到左的,所以避免使用标签属性之类的
 - 避免使用昂贵的属性,比如calc计算属性之类的
 - 注意重绘和回流属性的正确的使用,比如获取宽高,改变字体,改变布局就会引起回流。像改变背景颜色之类的只会引起重绘
 - 使用transform和opacity来实现动画
 
js
- 对于重复性的操作使用节流和防抖控制次数
 - 使用事件代理取代大量的事件绑定
 - 对于dom操作比较频繁的,使用Fragment减少操作次数
 - 把脚本放在底部,如果js放头部的,可以加defer来实现延迟加载js
 - defer,无阻塞加载Js文件,但是是等dom渲染完只会执行加载的Js
 - async,无阻塞加载Js文件,加载完之后立马执行
 - 
从请求角度
 使用CDN加载静态资源
- 划分内容到不同的域名
 - 添加cache-control和etag等相应头
 - 启动gzip
 - 文件合并打包,减少Http请求数量
 - 压缩请求内容的大小,一般压缩js/css/html
 图片懒加载,给图片添加个data-src存放真是的src,当图片可见的时候在把data-src赋值到src真正发送图片加载请求
从打包角度
webpack按需加载
- 结合根据内容生成文件名,在output文件名后面加上contenthash,然后import实现按需加载
 
- 提取第三方库
- splitChunk
 
 - 减少ES6转换为ES5的冗余代码
 - 抽取公共模块
 - tree-shaking
 
