美文网首页移动应用
客户端程序优化

客户端程序优化

作者: Freedoms1988 | 来源:发表于2017-03-02 18:03 被阅读0次

    一、架构演化

    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

    感谢:阿里云栖社区

    相关文章

      网友评论

        本文标题:客户端程序优化

        本文链接:https://www.haomeiwen.com/subject/izgcjttx.html