full link - SAMUELGG/doc GitHub Wiki
概览
- 前端优化
- 网络优化
- 后端优化
前端
优化指标 首屏加载时间 解析和执行效率 流畅度
浏览器渲染引擎 JS引擎 定时器触发器线程 浏览器事件线程 浏览器HTTP异步请求线程
css优化
- css写在头部, JavaScript写在尾部和异步;
- 避免图片和iframe等空src;
- 避免重新设置图片的大小;
- 图片避免使用dataURL;
- 避免在html中写style属性;
- 避免CSS表达式;
- 移除空的css规则;
- 正确使用Display;
脚本优化
- 减少重绘和回流;
- 缓存Dom选择和计算;
- 缓存列表length;
- 尽量使用事件代理,避免批量绑定事件;
- 尽量使用ID选择器;
- 移动端使用touchstart、touchend代替click;
渲染优化
- html使用viewport;
- 减少DOM节点;
- 尽量使用css3动画;
- 合理使用requestAnimatinFrame代替setTimeout;
- 适当使用canvas;
- Touchmove和Scroll事件会导致多次渲染;
- 使用 css3过度和3d;
代码混淆的性能影响 混淆的两种方式: 正则替换[强度弱,容易被破解] 修改抽象语法树[影响性能] v8和JS引擎的字符串拼接性能非常弱,字符串拼接会使用大量的临时变量,JS引擎需要大量工作来清理临时变量影响性能;
DOM操作流程 1、计算样式规则:JS计算需要如何操作DOM结构,并计算节点的最终样式规则; 2、Layout:根据css节点规则,来计算节点在屏幕上位置和尺寸,由于自上而下、从左到右布局,一个节点变化会导致多喝节点重新布局; 3、Update Layer Tree: 一个页面可能有多个渲染层,Layer Tree用来维护各个渲染层的顺序; 4、Paint:绘制就是填充像素的过程; 5、Composite:在多个层分别完成绘制后,浏览器会按各个绘制层的正确顺序拼合成一个图层,显示在屏幕上;
所以JS操作时尽量避免正常的操作流程,有些步骤是可以跳过的,比如使用transform、opacity等属性,直接拼接合成;
网络优化
- 零请求
- 无流量
以上意图就是减少请求数,降低请求量;
主要手段:
加载优化
- 合并CSS、JavaScript;
- 合并小图片,使用雪碧图;
- 缓存一切可缓存的资源;
- 使用长Cache;
- 使用外联式引用CSS、JavaScript;
- 压缩HTML、CSS、JavaScript;
- 启用Gzip;
- 使用首屏加载;
- 使用按需加载;
- 使用滚屏加载;
- 通过Media Query加载;
- 增加Loading进度条;
- 减少Cookie;
- 避免重定向;
- 异步加载第三方资源;
使用HTTP2协议
- 新增二进制分帧层; [实现了多向请求和相应,优化了请求的优先级,保证了每个来源一个连接]
- 服务器推送;
- 首部压缩;
图片优化
- 使用智图 腾讯智图
- 使用css3 svg iconfont 代替突破
- 使用srcset;
- webP优于JPG;
- png8优于gif
- 首次加载不大于1041kb;
- 图片不宽于640;
后端
暂无