• 移动优化经验


    # 移动优化经验

    ## 网络加载

    ### 优化请求

    - 优化请求包大小

    * 代码压缩

    * 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)

    - 图片尺寸限制

  • 相关阅读:
    windows 根据端口查看进行PID 并杀掉进程
    Linux下安装mysql-5.7
    springcloud参考视频和源码笔记
    idea中配置热部署
    技术/方案实现目录
    系统功能设计产出模版
    JQuery点击行tr实现checkBox选中与未选中切换
    Java学习第一天
    ES6 记录
    微信小程序记录
  • 原文地址:https://www.cnblogs.com/timssd/p/7441155.html
Copyright © 2020-2023  润新知