旧酒新瓶——换个角度提升 App 性能与质量

  主讲人:高亮亮 ---   饿了么移动技术部高级iOS工程师,负责饿了么商家版iOS APP开发,对架构和系统底层有深入研究,擅长移动性能分析,trouble shooting,iOS 逆向编程。

  主讲时间:2017-05-26

  

  主讲内容:

  1、性能与质量概述:

  2、“新”技术概念的介绍与实践:

  3、违反常规的“真理”:

  

  一、性能与质量概述:

  • 应用分级以及与性能质量的关系

  • 根据设备特点设计提升方案

  • 结合主要业务场景制定优先级

  回流(Reflow)/ 重绘(Repaint)

  

  • 回流:流式布局下,由于参照元素布局框发生变化而导致的布局重新计算。

  • 重绘:元素布局不发生变化的情况下,重新渲染视图。

  案例重现:

  

  • 单张订单视图作为重用的基本单元

  • 视图层级复杂,且采用动布局技术

  • 视图不固定,且存在强依赖关系

  • 商品列表在滚动时产生严重回流

  二、解决方案

  • 调整视图关系,合理利用重用机制,避免滚动时回流

  • ADK 方案,异步计算布局并缓存,细腻的线程控制

  

  节流(Throttle)/ 防抖(Debounce)

  

  案例重现

  失败重试导致的 Self-DDoS  

  • 在保证服务前提下的自动重试,且固定重试频率

  • 忽略错误类型,“一刀切”式的 DFF 设计

  • 重试周期同步,从而导致恶性循环

  解决方案:

  • 指数回退 —— 固定重试间隔加倍

  • 添加抖动 —— 随机抖动间隔,避免锁定同步周期

  • 标记重试 —— 优先处理高重试请求

  • “黄金”重试节流策

  

  扩展运用

  • 实时查询防抖 —— 减少网络请求

  • 事件响应节流 —— 避免冗余资源消耗

  • 界面渲染节流 —— 避免大量 CPU 消耗

  渐进增强(PE)/ 优雅降级(GD)
  

   案例重现:

  基于三方服务的推送系统

  • 同业务对推送的实时性、可靠性要求高且存在差异

  ---➡ 利用更优的组件作为首选,三方作为备选

  • 三方服务不可控,且在实时性、可靠性上都存在不足

  ---➡ 操作的效率和速度随着失效部件的增加逐渐下降

  解决方案:

  

  Taco 混合推送框架

设备

平台

系统

前后台

发送数

发送成功数

接收消息数

到达率

红 Note3

Android

MIUI 8

前台(锁 屏)

300

297

267

89.9%

Android

Smartisan OS 3.2.5

后台( 锁 屏)

300

298

250

83.9%

Nexus5

Android

6.0

后台(锁 屏)

300

296

234

79.1%

iPhone 6

iOS

iOS 9.1

前台( 锁 屏)

300

299

299

100%

iPhone 4s

iOS

iOS 8

前台( 锁 屏)

300

296

178

60.1%

  稳 => 快 => 省,普适法则

  • 0崩溃&0错误!=好 

  • 启动时间:main() 后 main() 前重要

  • 包体积优化: 进制 > 资源

  • 耗电优化:硬件 > 软件

  0 崩溃 & 0 错误 != 好用

  

  

  0 崩溃 & 0 错误 != 好用

  

  启动时间:main() 后 main() 前重要

  • main() 前优化点

    ‣ dylib loading —— 多为系统动态库,普遍使用静态库

    ‣ rebase / binding —— 占比低,减少 Class 等行为违反软件工程原则

    ‣ Objc Setup —— 受工程量影响,盲目优化违反工程原则

    ‣ Initializer —— + load 优化,影响工程设计

  • main() 后优化点

    ‣ 屏渲染优化

    ‣ 避免主线程阻塞

    ‣ 关键路径线程优化

    包体积优化: 二进制 > 资源                 耗电优化:硬件 > 软件

     

  耗电优化:硬件 > 软件

    

  

极光开发者沙龙 之 移动应用性能优化实践 【一】旧酒新瓶——换个角度提升 App 性能与质量的更多相关文章

  1. 极光开发者沙龙 JIGUANG MEETUP —— 移动应用性能优化实践

    活动背景 移动互联网时代,各大互联网公司都已将自己的产品和服务全面移动化,各类新产品功能都会优先在移动 App 上尝试. 应用性能作为影响用户体验最重要的因素,在开发过程中显得尤为重要. 用户网络环境 ...

  2. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

  3. 从零开始入门 K8s | etcd 性能优化实践

    作者 | 陈星宇(宇慕)  阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...

  4. 直播推流端弱网优化策略 | 直播 SDK 性能优化实践

    弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...

  5. 转:携程App的网络性能优化实践

    http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ...

  6. Lazy<T>在Entity Framework中的性能优化实践

    Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的 ...

  7. Redis各种数据结构性能数据对比和性能优化实践

    很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...

  8. Tree-Shaking性能优化实践 - 原理篇

    Tree-Shaking性能优化实践 - 原理篇   一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前 ...

  9. Hadoop YARN:调度性能优化实践(转)

    https://tech.meituan.com/2019/08/01/hadoop-yarn-scheduling-performance-optimization-practice.html 文章 ...

随机推荐

  1. Flex——弹性布局

    今天在做项目时,要一个500*100的页面区域做三个橱窗,尼玛可是恶心死我了!光是计算左右内外边距,左右宽度,就废了一上午时间~~好吧,我承认我的数学老师挂得早! 正在苦逼的列公式,定位图片,浮动文字 ...

  2. MySQL一个简单的存储过程demo

    使用的工具是Navicat for MySQL. 首先创建一个学生表 mysql) ) ) auto_increment,age ) ) not null,primary key(s_no)); Qu ...

  3. activity生命周期分析(两个activity之间跳转的生命周期执行顺序)

    NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时         A===onPause--->onStop       ...

  4. SSH整合总结(xml与注解)

    本人自己进行的SSH整合,中间遇到不少问题,特此做些总结,仅供参考. 一.使用XML配置: SSH版本 Struts-2.3.31 Spring-4.3.5 Hibernate-4.2.21 引入ja ...

  5. java面试题(一)

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  6. 热爱H5

    我不去想是否能够功成名就既然选择了前端便只顾埋头于无声 我不去想能否赢得掌声既然钟情于IT就勇敢得踏步前行 我不去想前行的路上会不会日暮穷途既然目标是未来留给现在的只能是汗水 我不去想所谓的成功是不是 ...

  7. mybatis插入List集合数据

    处女帖 今天做完一个定时任务将一个表中的数据每天统计到另外一个表中,开始是用循环的方式向数据库添加,觉得数据库可能访问压力过大,所以就使用了mybatis的foreach标签来稍微的减少压力. 首先封 ...

  8. SELECT中(非常)常用的子查询操作

    MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...

  9. Python-3------新年考试周的Python学习

    2016一开始就是考试周,准备专业课的考试复习.每天上午复习,晚上复习到8点半,之后到10点这点时间来看Python.庆幸没有在忙碌的时候荒废 Python的学习. 期待寒假,以前寒假在家总是没事做, ...

  10. 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵

    https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive ...