网络请求
- 减少HTTP资源请求次数(合并接口)
- 减小HTTP请求大小
- 避免页面中空的href和src
- 减少页面重定向
- 根据条件使用可缓存的AJAX
- 减少Cookie的大小并进行Cookie隔离
- 推荐使用异步JavaScript资源
- 消除阻塞渲染的CSS及JavaScript
- 避免使用CSS import引用加载CSS
页面渲染
- 把CSS资源引用放到HTML文件顶部
- JavaScript资源引用放到HTML文件底部
- 不要在HTML中直接缩放图片
- 减少DOM元素数量和深度
- 减少重绘和回流
- 尽量避免使用<table>、<iframe>等慢元素
- 避免使用CSS表达式或CSS滤镜(渲染速度慢)
其它
- 拼接、合并、压缩、制作雪碧图
- 使用静态资源CDN托管存储文件
- 尽量缓存能缓存的资源
- 将CSS或JavaScript放到外部文件中,避免使用或标签直接引入(可以有效利用浏览器的静态资源缓存)
- 提高代码质量
1)html:
dom的层级尽量不要太深,否则会增加dom树构建的时间,js访问深层的dom也会造成更大的负担。
meta标签里需要定义文档的编码,便于浏览器解析
2)css:
减少 CSS 嵌套层级和选择适当的选择器
正确使用 Display 属性,因为 Display 属性会影响页面的渲染
避免 CSS 表达式
移除空的 CSS 规则
不滥用 Web 字体、Float
不声明过多的 Font-Size
值为 0 时不需要单位
标准化各种浏览器的前缀
避免让选择符看起来像正则表达式
3)js:
减少通过JavaScript代码修改元素样式,尽量使用修改class名方式操作样式或动画
访问dom节点时需要对dom节点转存,防止循环中重复访问dom节点造成性能损耗。
慎用 定时器 和 计时器, 使用完后需要销毁。
用于复杂计算的js代码可以放在worker进程中运行
对于一些高频的回调需要对其节流和消抖,就是 debounce 和 throttle 这两个函数。比如scroll和touch事件