移动应用

客户端程序优化

2017-03-02  本文已影响0人  Freedoms1988

一、架构演化

1、独立型应用:
    功能特征:�业务简单,用户操作体验简单,页面量少
    开发团队特征:人数少,沟通方便,
    业务特征:业务变化频繁,不稳定
2、平台型应用:
    功能特征:业务稍复杂,用户操作体验稍复杂,页面量增多
    开发团队特征:人数稍多,沟通成本已成为重要条件之一
    业务特征:业务变化稳定,多增加新业务,少修改老业务,业务相关性低
3、生态型应用:
    功能特征:业务复杂、关联性高,用户操作复杂,页面量大
    开发团队特征:多团队开发,沟通成本较高
    业务特征:业务变化稳定,多增加新业务,少修改老业务,业务相关性高

二、技术挑战

1、业务复杂性
    页面多
    流程复杂
    业务关联性增强
2、设备多样性
    设备配置参差不齐,高端设备、低端设备配置跨度大
    网络状况参差不齐,优秀WIFI网络与GPRS带宽水平跨度大

三、性能优化指标

    1、启动时间
    2、运行流畅度
    3、卡顿时间、次数
    4、流量
    5、重复下载
    6、HTML加载速度
    7、耗电量
    8、内存占用
    9、GC
    10、WIFI扫描
    11、安装包存储
    12、本地缓存

四、最佳实践

    1、电量优化
          系统兼容性、业务、技术基础、Wakelock
          耗电量增加指标:耗电排名、耗电率
          引起耗电量升高因素:CPU使用率、定位服务、线程挂起、轮询服务、网络连接服务
          解决思路:dump所有线程,观察线程消耗的CPU时间,从而定位到运行线程的代码
    2、流量优化
          增量更新、网络协议、RPC
          流量增加指标:网络请求流量阈值
          引起流量升高因素:网络请求、远程资源下载
          解决思路:hook所有请求,指定流量阈值,针对超过阈值的请求进行协议优化、业务优化
    3、内存优化
          对象创建、对象占用、内存泄露
          内存异常指标:频繁GC、内存消耗排名、长时间使用内存释放率
          引起内存异常因素:内存泄露、Bitmap、异常长时间持有对象无法释放内存
          解决思路:memtrace/hprof内存分析,遍历对象,释放无用Bitmap,HTML页面内存消耗分析,对象池复用
    4、存储优化
          缓存同步策略、增量更新
          存储异常指标:内存增长过快,内存只涨不降
          引起存储异常因素:缓存同步策略问题
          解决思路:缓存同步策略优化、增量更新,尽早释放无用缓存

    5、应用级架构优化
          插件化、模块化、服务化
          架构级异常:大中型应用多业务开启长连接、处理推送、处理即时聊天信息
          引起架构级异常隐私:应用级架构设计问题,沟通不畅
          解决思路:将应用中的业务进行模块化设计,降低功能与业务的耦合度,参考iOS系统的设计思路,将诸如:推送、缓存、心跳等基础服务功能从具体业务中独立出来,使多个业务通过统一标准调用此类基础服务,提高架构兼容性、稳定性、扩展性

五、稳定性

  1、Crash优化
        指标:Crash率 0.1%、持久性闪退 < 0.001%
  2、启动闪退
        指标:启动时间
  3、启动卡死
        指标:30s卡死
  4、ANR
        指标:5sANR

六、超级App的运维体系

1、异常监控

    客户端:性能、电量、流量、内存、稳定性、异常统计上报
    服务端:异常分析、提取特征、风险预测、自动报警、状态跟踪

2、电量计算

    系统级数据采集:BatteryStatsHelper -> BatteryServiceImpl -> batterystats.bin
    电量消耗模型
            维度:CPU,Wakeup,Wakelock,WIFI,Tcp,WIFIScan,Sensor
            权重:power_profile.xml @ framework-res.apk
    关键技术优化:Androidv4.4之后,系统收掉电量权限。目前获取电量办法是模仿整个Android系统计算电量,即从BatteryStats.bin中获取每一个维度的权重,将维度和权重结合就可以算出Android系统的耗电量。

3、快速定位诊断

    电量诊断:自动收集CPU、Sensor、Wakelock的耗电数据、dump线程栈
    流量诊断:自动收集高流量url
    闪退诊断:捕捉native闪退日志,内存状态日志

本文将不定期更新,敬请关注。

参考文章:https://yq.aliyun.com/articles/59942?spm=5176.100239.blogcont69316.94.YliSMO

感谢:阿里云栖社区

上一篇下一篇

猜你喜欢

热点阅读