移动优化经验

优质
小牛编辑
142浏览
2023-12-01

网络加载

优化请求

  • 优化请求包大小

    • 代码压缩

    • Gzip压缩

    • 不同网络(2G/3G/4G/wifi)图片尺寸

    • 合理减少Header字段/cookie

    • MTU策略(1500字节)

    • 首屏加载时间控制

      • 3s完成(5s为用户最大容忍度)

      • 网络平均速度(2.71Mb/s = 0.33875MBps(1Mbps=8MBps) = 346.88KBps)

      • 不超过1041KB,经验值200K(考虑打开响应、网络连接至少600ms)

  • 减少请求次数(仅针对HTTP)

    • 合并js、css文件、雪碧图

      • 移动端雪碧图(构建)

      • combo

    • 避免重定向(一次重定向至少600ms)

    • 避免重复资源请求

    • 同时并行请求数量(android:4个,ios 5以后可支持6个)

  • 解耦请求依赖

    • 文件并行加载/依赖执行(构建+模块化)

    • 首屏CGI提前(组件)

    • inline首页必备js/css

    • 异步加载非首屏

  • 连接优化

    • 支持keep-alive

    • 网络时间

      • DNS(2G:3.85785;3G:1.60643;WIFI:0.986921;unknown:1.67838)

      • TCP(2G:2.33482;3G:0.743109;WIFI:0.550208;unknown:1.20898)

      • RTT(2G:2.57478;3G:0.608047;WIFI:0.444332;unknown:1.30601)

      • Tran(2G:14.0374;3G:60.1967;WIFI:70.8728;unknown:36.3655)
    • DNS Prefetch
    • HTTP2/SPDY
    • TCP握手/TLS密钥协商

缓存策略

  • Cache

    • Browser Cache(一年)

    • AppCache(选择)

    • 离线包(native下必须)

  • Web Storage

    • localStorage

    • sessionStorage

    • nativeStorage(native,>=4.6,大数据)

  • Cookie

  • Web DB

    • indexedDB(推荐)

    • Web SQL

  • 合理缓存CGI数据(local/ajax)

加载策略

  • 首屏加载

    • Server Render(React-Node)
  • 按需加载(组件化)

  • lazyload(图片、组件)

    • 延迟加载图片

    • 滚动加载图片

  • Media Query

监控上报

H5监控体系

  • 成功/失败率

    • 图片

    • CDN文件

    • CGI

    • 直播/录播播放

      • 加载

      • 断流

  • 测速(2G/3G/4G/wifi、组件)

    • 首屏展示速度(首屏渲染)

    • CGI测速

    • CDN文件测速

    • 图片测速

    • 直播/录播播放

      • 加载

      • 断流

  • 版本覆盖

    • 离线包更新率

      • tdw:版本号、用户、环境等
    • 离线包覆盖率

      • monitor
  • 错误日志

    • badjs

    • tryjs

  • performance

    • timing(ios 8不支持)

    • resouce timing(缓存/非缓存,手机暂不支持)

视频监控体系

  • 直播播放

    • 视频加载流程监控(playing/paulse/timeupdate)

      • 平均延时

      • 失败率

    • 卡顿缓冲监控(timeupdate)

      • 卡顿缓冲时长

      • 卡顿缓冲次数(短流率)

    • 视频异常监控(onerror)

      • 源文件不存在

      • 取回过程被用户中止

      • 下载时错误

      • 解码时错误

      • 不支持的音视频

      • 其他cgi请求异常引起的错误等

  • 录播

    • 视频加载流程监控(playing/paulse/timeupdate)

      • 平均延时

      • 失败率

    • 卡顿缓冲监控(timeupdate)

      • 卡顿缓冲时长

      • 卡顿缓冲次数(短流率)

    • 视频异常监控(onerror)

      • 源文件不存在

      • 取回过程被用户中止

      • 下载时错误

      • 解码时错误

      • 不支持的音视频

      • 其他cgi请求异常引起的错误等

    • 单位录播时长等待监控

      • 录播播放时长

      • 下载等待时长

SEO

  • keywords/description

  • 合理减少pages数量

  • 减少图片/flash/弹窗

  • 外链权重不高

  • canonical/alternate

  • 提交sitemap

渲染优化

HTML

  • HTML meta viewport(可以加速页面渲染)

  • 优化DOM tree

    • 减少html标签,避免不必要的嵌套

    • 避免table

    • 减少DOM深度

  • 减少DOM渲染

    • VirtualDOM(React)

    • React-Native

动画

  • 合理使用requestAnimationFrame

  • 尽量使用css3

  • 合理使用Canvas代替多DOM tree(5个) css3

  • 高频事件(touchmove、scroll) lazy化(debounce.js)

  • GUP渲染

    • 大量的渲染(Canvas、WebGL、Video)

    • 3D Transformed(transitions、3D transforms)

    • Animated css属性(filters, masks, blend modes, reflections, opacity)

    • position: fixed

    • content overlapping existing GPU-rendered bitmaps

repaint/reflow

  • 避免重新设置图片大小

  • 避免频繁的触发repaint/reflow

文件优化

css样式

  • 避免style标签

  • 去掉expression

    • 移除空的(多余的)选择器
  • 合理使用Float

  • 合理使用iconfont

  • 值为0的属性不带单位(兼容性、压缩自动处理)

  • 标准化浏览器前缀(构建)

  • 减少font-size的申明(增加浏览器渲染计算)

  • 异步css文件换成js文件(构建)

js脚本

  • 框架组件选择(zepto/react/vue/angular)

  • 使用documentFragment(zepto已解决)

  • 事件优化

    • 事件代理

    • 频繁事件优化

    • touchsatrt、touchend(tap)代替click

  • 使用mqqapi(http://mqq.oa.com/)

  • id选择器

  • 合理缓存对象(DOM、js对象、length)

  • 慎用with

  • 避免eval、Function

  • 使用Join

图片文件

  • 图片大小

    • 压缩工具

      • 优图(tu.oa.com)

      • 智图(zhitu.tencent.com)

      • grunt插件

    • 图片格式

      • webP

      • sharpP

  • 减少图片使用

    • css画图

    • svg画图

    • 合理iconfont代替图片(最后的选择)

    • 避免使用bmp图片

  • srcset + sizes(兼容性)

  • 图片格式(webp > jpg > png(png8 > png24) > gif)

  • 图片大小限制(10K,不超过30K)

  • 图片尺寸限制