换个角度提升APP性能和质量

摘要

结合当下火热的移动性能话题和 APM 系统,围绕移动应用性能质量,谈谈如何避开传统解决方案,将其他技术领域的概念如回流重绘,节流防抖、优雅降级以及渐进增强等,通过类比借鉴,作为一个新的角度来思考质量提升问题,并灵活的运用到移动端,从而提升应用的性能,稳定性和可用性。

嘉宾演讲视频回顾及PPT链接:http://suo.im/1BzjC7

刚加入饿了么的时候做了一年左右的业务线,主要是商务平台。在更早之前做过web开发。最近刚好在开发web相关的项目,觉得很多东西各个端是共通的,APP端也能借鉴一些东西,把之前的老经验带到移动端上,来做有意思的事情。

分享大纲

第一,移动性能与质量的概述

第二,所谓的“新”技术概念的介绍

第三,几点有意思的事和一些困难

移动性能与质量的概述

饿了么的用户端不会出现高峰期的现象,订餐时间都选在中午之前的一到两个小时,量级非常大。我们内部有其他很多业务线,针对与配送人员和商户的客户端,还有供应链,以及内部的沟通工具。我们内部会简单地做分析优良中差评做分级。

最早是以崩溃来算,但后来崩溃在后期并不是特别看重。崩溃率高包括ANR多这一类肯定是差,只能轮为可用的阶段。而好用的阶段除了UPM做指导性的工作,还要做非常深化的业务,我们一个框架部对外一直在输出各种SDK,供内部使用。

根据设备类型,除了在跑移动端,还有PC以及外围。PC基本上没有跑流量、耗电量的问题。结合主要的业务场景,我们面临的问题是用户端停留在用户手上的时间很短暂,而商户端和配送端一直开着APP。对配送人员来讲优先考虑的是耗电问题,耗电问题在移动端的体现有两点,网络和定位。GPS定位非常耗电,不停定位还要提升精度,是对物流端APP最大的挑战。其次对商户端考虑的是网络的优化和性能,本身网络环境是相对比较好的,我们主要提升它的APP到达和业务方面。

所谓的“新”技术概念介绍

我们经常遇到的回流和重绘问题。这个问题很经典,从最初的页面加载到最后绘制在屏幕上。

回流是在流失布局下,参照元素的布局坐标一旦发生了改变,那所有依赖它的元素都要重排,重新计算布局位置的过程,尤其消耗UPC。

重绘是不发生重排的情况下重新布局,现在的GPU都那么强大,性能并不是瓶颈。

下面是我们处理商品订单的问题,订单当时是检测到有很多用户的投诉,订单改版之后性能特别差。性能主要是卡在CPU上,CPU在计算的时候是非常慢的。

最终我们优化的结果非常好。虽然它也要做布局计算,但在快速滚动的时候帧率是达到非常满意的情况,基本上接近于60帧。

前端在滚动页面的时候需要做一些效果,在滚动时监听。在很高的频率下不停地设计元素的位置,会导致滚动时的卡顿问题。而前端用的解决方法就是节流。

我们的做法还应用于正在开发的APM台。我们有一个数据收集的问题,数据收集的数额大,频次也快,用户的轨迹分析的数据很多。我们在服务器传送数据的时候如果失败的话,基本上为了保证数据传输过去,对于非实质性数据一定要把它传过去,就存在了自动重试的问题。我把它定位为“黄金”重试节流策略。

接下来渐进增强和优雅降级。Graceful Degradation是对于出现某种情况不停地做减法。对于外围来讲,浏览器的碎片化特别重复,安卓端也有这种问题。如果它的功能不可用,就把这个功能减掉。还有渐进式增强,依赖浏览器IE6,设计一套基本的功能能在上面用,不停地做架构,直到它表现的非常好。利用更优组件,三方作为备选。操作效率会出现问题,操作效率和速度是随着失效部件的增加逐渐下降的。我的设计就是这样的框架,很简单的,先建长连,可控可靠,存在异常就降级。

最后讲法则。零崩溃零错误等于好用;启动时间Main后比Main前重要;二进制大于资源,耗件优化,硬件大于软件。

有意思的事和一些困难

关于耗电问题。手机设备在通讯的时候处于休眠期,当你有需求的时候会自动开启活跃期,活跃期和停歇期切换频繁的话,电量就掉的非常快。我们的弱网判断是针对与它的响应时间,我们自己做的网络框架可以知道所有的DSR包括数据时间。

我们拿来之后发现超时间,网络响应时间太长。这种情况下会做节流层,要么不传数据,要么降低发送频率。合理的缓存和批量的传输。大家有时候也会要求实质性非常高的数据往后端发,用户点击一搜就把数据转换成事件,可这样的情况下瞬间发送服务器还是会崩溃。我们做一个简单的调整,就是做忍受值。我们认为数据从生成劳动发送到传输,传输的时候查过最慢的DNS解析是80秒,是非常非常差的网络插件。我们认为有忍受值,目前设定的单位是60秒钟,60秒钟的数据都认为它是有实时属性、架构的才往后端传。一旦出超过60秒,就从传输队列去掉。对我们传输的间隔也会调整,除了一系列网络的节流优化,加上这套实施策略,极大地提升了网络的效率和节点问题。

最终我们还会发现通过APM平台会发现主机解析率特别高的,能达到86%。存在这样的失败率的网络软件,而且还是每台不停地发,能看到它发送的频率。我们是天网系统,是会开源的,服务器端的代码也会开源的,只是服务不会去做。

今天基本上就讲这么多,谢谢大家!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

影响云计算性能因素剖析

如今出现了很多基于云计算技术的各种云服务,可是如何去衡量一个云服务的好与差,并没有很清晰的标准。其实,对于云服务,一定程度上是由云计算技术的性能所决定的。说到性...

3116
来自专栏知晓程序

好久不见!小程序深夜连发 4 大新能力,竟把亲儿子的「特权」也开放了?

在一段时间的修养生息之后,小程序又在昨天深夜连发四大新能力。还是熟悉的配方,还是熟悉的味道。下面就跟知晓程序(微信号 zxcx0101)一起来看看,都有哪些新能...

1181
来自专栏极乐技术社区

小程序一周报 | 小程序插件功能上线/小程序广告正式上线

3月13日,小程序插件功能上线,插件是可被添加到小程序内直接使用的功能组件。开发者可以像开发小程序一样开发一个插件,供其他小程序使用。同时,小程序开发者可直接在...

1420
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–项目装配(240)-11研发工作

image.png CJ20N开始研发工作 在此项目中,设置 WBS 要素订单 来控制 WBS 要素 研发、生产和交货/测试 中的对应活动。在完成研发工作后,可...

3909
来自专栏前端黑板报

全栈工程师权威指南

根据 Stack Overflow 2016年开发者调查显示,全栈工程师是最受欢迎的开发者职业。毫无疑问现在有许多在线或个人课程来帮助程序员成为全栈开发者,甚至...

21511
来自专栏人称T客

HTML5大战原生开发应用 谁赢谁输?

最近总有人在问到底是HTML5好,还是原生开发应用好,这个要一分为二的看待,主要看你的应用场景,适合你的就是最好的,下面我们比较了五个参数列表,让你清晰的了解何...

3185
来自专栏极乐技术社区

一周小程序【资讯教程Demo】更新

轻松一刻 ? 漫画来自于设计师西乔《神秘的程序员们》 资讯与教程 【微信小程序】再次授权地理位置getLocation+openSetting使用 实战分享,蓝...

2588
来自专栏java一日一条

2016年最好的15个Web设计和开发工具

网络无处不在。世界上几乎没有地方是没有被因特网所渗透的。无孔不入的网络为Web设计师和开发人员开辟了新的机遇渠道。每家企业都在争取在这个在线平台上展现头角,以便...

1522
来自专栏花叔的专栏

非技术同学该怎么解读小程序官方API

部分非技术的同学,可能对小程序提供的开发能力还是比较陌生,好多产品或者品牌同学会问小程序能做什么样的功能,楼主今天尝试用简单的话来重新阐述一下,希望对非技术的同...

3678
来自专栏即时通讯技术

P2P技术如何将实时视频直播带宽降低75%?

实时视频直播经过去年的千播大战后已经成为互联网应用的标配技术,但直播平台的成本却一直居高不下,各个平台除了挖主播、挖网红以外,其背后高额的带宽费用也是他们最大的...

4973

扫码关注云+社区

领取腾讯云代金券