原文地址https://zhuanlan.zhihu.com/p/25176904?utm_source=wechat_session&utm_medium=social&utm_member=MzFiZGQwMmUwMGNjYjNlYmJkMWY4MmZjMTY4MjdlZmY%3D%0Acss
概述html
熊D注:鉴于第 1 条简单修改了一下标题
优化指南前端
加载过程是最为耗时的过程,可能会占到总耗时的 80% 时间,所以是优化的重点html5
由于手机浏览器同时响应请求为 4 个请求(Android 支持4个,iOS 5 后可支持 6 个),因此要尽可能减小页面的请求数,首次加载同时请求数不能超过 4 个css3
使用缓存能够减小向服务器的请求数,节省加载时间,因此全部静态资源都要在服务器端设置缓存,而且尽可能使用长 Cache(长 Cache 资源的更新可以使用时间戳)git
熊D注:也许使用 MD5 指纹更加可靠
减小资源大小能够加快网页显示速度,因此要对 HTML、CSS、JavaScript 等进行代码压缩,并在服务器端设置 GZipgithub
写在 HTML 头部的 JavaScript(无异步),和写在 HTML 标签中的 Style 会阻塞页面的渲染,所以 CSS 放在页面头部并使用 Link 方式引入,避免在 HTML 标签中写 Style,JavaScript 放在页面尾部或使用异步方式加载。web
熊D注:即便用 async 和 defer 属性
首屏的快速显示,能够大大提高用户对页面速度的感知,所以应尽可能针对首屏的快速显示作优化正则表达式
熊D注:注意可交互元素的状态管理
将不影响首屏的资源和当前屏幕资源不用的资源放到用户须要时才加载,能够大大提高重要资源的显示速度和下降整体流量
PS:按需加载会致使大量重绘,影响渲染性能算法
大型重资源页面(如游戏)可以使用增长 Loading 的方法,资源加载完成后再显示页面。但 Loading 时间过长,会形成用户流失
对用户行为分析,能够在当前页加载下一页资源,提高速度
图片是最占流量的资源,所以尽可能避免使用他,使用时选择最合适的格式(实现需求的前提下,以大小判断),合适的大小,而后使用智图压缩,同时在代码中用 Srcset 来按需显示
PS:过分压缩图片大小影响图片显示效果
Cookie 会影响加载速度,因此静态资源域名不使用 Cookie
重定向会影响加载速度,因此在服务器正确设置避免重定向
第三方资源不可控会影响页面的加载和显示,所以要异步加载第三方资源
脚本处理不当会阻塞页面加载、渲染,所以在使用时需当注意
空 Src 会从新加载当前页面,影响速度和效率
重设图片大小是指在页面、CSS、JavaScript 等中屡次重置图片大小,屡次重设图片大小会引起图片的屡次重绘,影响性能
DataURL 图片没有使用图片的压缩算法文件会变大,而且要解码后再渲染,加载慢耗时长
熊D注:使用 DataURL 来显示的图片通常尺寸都较小或结构较简单,推荐优先使用 CSS 实现
CSS 表达式的执行需跳出 CSS 树的渲染,所以请避免 CSS 表达式
空的 CSS 规则增长了 CSS 文件的大小,且影响 CSS 树的执行,因此需移除空的 CSS 规则
Display 属性会影响页面的渲染,所以请合理使用
Float 在渲染时计算量比较大,尽可能减小使用
Web 字体须要下载,解析,重绘当前页面,尽可能减小使用
过多的 Font-size 引起 CSS 树的效率
为了浏览器的兼容性和性能,值为 0 时不要带单位
熊D注:出于兼容性考虑是否弃用 -o- 有待看具体项目需求
高级选择器执行耗时长且不易读懂,避免使用
熊D注:此外,嵌套过深的选择器也应慎用,权重较大,解析速度慢且不利于 CSS 的模块化
每次 Dom 选择都要计算,缓存他
每次 .length 都要计算,用一个变量保存这个值
熊D注:执行过程当中,任何使用超过两次的变量,都应考虑缓存该变量以提升执行效率
ID 选择器是最快的
使用 touchstart、touchend 代替 click,因快影响速度快。但应注意 Touch 响应过快,易引起误操做
Viewport 能够加速页面的渲染,请使用如下代码
<meta name="viewport" content="width=device-width, initial-scale=1">
Dom 节点太多影响页面的渲染,应尽可能减小 Dom 节点
Touchmove、Scroll 事件可致使屡次渲染
CSS 中如下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发 GPU 渲染,请合理使用
PS:过渡使用会引起手机过耗电增长
熊D注:推荐拓展阅读 > CSS动画属性性能 & 高性能 CSS3 动画
参考资料
本文由 @米随随 发表在 移动H5前端性能优化指南 读后深表赞同,特来搬砖 最后:感谢原做者写的好文~敬礼~