极光开发者沙龙 之 移动应用性能优化实践 【一】旧酒新瓶——换个角度提升 App 性能与质量
旧酒新瓶——换个角度提升 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 性能与质量的更多相关文章
- 极光开发者沙龙 JIGUANG MEETUP —— 移动应用性能优化实践
活动背景 移动互联网时代,各大互联网公司都已将自己的产品和服务全面移动化,各类新产品功能都会优先在移动 App 上尝试. 应用性能作为影响用户体验最重要的因素,在开发过程中显得尤为重要. 用户网络环境 ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...
- 从零开始入门 K8s | etcd 性能优化实践
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
- 转:携程App的网络性能优化实践
http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ...
- Lazy<T>在Entity Framework中的性能优化实践
Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的 ...
- Redis各种数据结构性能数据对比和性能优化实践
很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...
- Tree-Shaking性能优化实践 - 原理篇
Tree-Shaking性能优化实践 - 原理篇 一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前 ...
- Hadoop YARN:调度性能优化实践(转)
https://tech.meituan.com/2019/08/01/hadoop-yarn-scheduling-performance-optimization-practice.html 文章 ...
随机推荐
- 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...
- ArrayList和List主要区别 就是ArrayList类型不安全。
什么是不安全? 1:List大家都知道初始化的时候需要定义其类型,例如 List<int> listTest = new List<int>():而ArrayList,例如:A ...
- angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法
本文地址:http://www.cnblogs.com/jying/p/6733408.html 转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...
- SEO,搜索引擎优化原理方法等整体把握
SEO 搜索算法: 全文文字 title 标签,title里面的文字 link 链接 link 链接里的文字 站点信任度 最佳实践: 一.设置title 准确的描述当前网页的内容 提高站点内title ...
- 实现TOLock过程中的一处多线程bug
背景 最近在啃<多处理器编程的艺术>,书中的7.6节介绍了时限锁--实现了tryLock方法的队列锁. 书中重点讲解了tryLock的实现,也就是如何实现在等待超时后退出队列,放弃锁请求, ...
- 某公司HP-EVA4400数据丢失的恢复方法和恢复全过程
一.故障描述1.设备清单一台HP-EVA4400控制器(型号:AG638-53011)三台HP-EVA4400扩展柜(型号为AG638-63001),和28块HP-FC磁盘(型号为300G FC硬盘) ...
- JS实现排序
排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行排序,外部排序是因排序的数据很大,一次不能够容纳全部的排序记录,在排序中需要访问外存.常见的内部排序算法有插入排序,选择排序,冒泡排序 ...
- nginx参数的详细说明
#开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log ...
- SVM流行库LIBSvm的使用和调参
简介:Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It ...
- input file图片上传预览效果
两种方法,方法一: js代码: //头像上传预览 $("#up").change(function() { var $file = $(this); var fileObj = $ ...