移动研发最佳实践-苗顺平

d1.png

一个移动应用从开发到上线,咱们应该考虑哪些问题?问题出现的时侯,如何完备的提出相关方案?并如何在这些技术方案中做出选择?应用稳定性的检查可使用哪些工具?从哪些地方能够提升应用的性能?图片、音视频资源、网络、优化算法?兼容性问题和安全性问题又该从何入手呢?带着这些疑问,七牛云存储邀请到思必驰高级技术总监苗顺平为你们进行一个总结和分析,下面是完整的现场记录:
我想先看一下参与移动开发的人有哪些?能够占到一半,另外一半是服务端研发。跟你们讨论一下,对于一个移动应用来讲咱们关注的有哪些方面,从一个想法出来,到最后咱们上线,或者说咱们在整个的过程当中会考虑哪些问题,咱们这里面简单的列了一下,也是抛砖引玉,也是本身的一些经验积累;另一方面是能学习一些新的想法,好比说FIR.im咱们也在用,咱们也本身搭了一套聊天系统,七牛的服务、CDN咱们也在用,可以认识这么多小伙伴很高兴。ios

d2.png

第一个问题是最近很大的事件,H5的规划已经确认下来了,可是在业内并无引发多么大的轰动;第二个是咱们的稳定性,第三个是关于性能。第四个是兼容性;还有一个是耗电量;最后两个是安全性和可靠性。我列的不见得全,纬度也不见得是一个纬度,很随意的列举一下。其实每个都是有一些坑的,也是给你们作一个提醒。先说一下H5,最先接触到这个事情的是在用开心的时候,关于Facebook、开心、人人网都面临一个问题,消息流特别多。算法

a33.png

图上右边是咱们最先用,可是咱们调研了以后否认了这个建议,我否认这个建议的时候承受了不少压力,这个地方并非说彻底的拥护者,或者损毁者,其实这个应该看一看为何。数据库

a44.png

关于Native App和Web App有一些区别,为何要否认H5整个性能呢?咱们采用的是原始的方案。这一块我相信如今有太多的例子给了咱们一些指导,好比说微信,就是用的这个方案。咱们看的朋友圈等等都是这样,只是和你们分享的。若是说有志于作一款性能跟用户体验,跟兼容性各方面都折中的一个方案的时候,你们不妨去思考一下咱们的方案是什么?咱们的技术人员、产品经理都会面临时间的压力、资源的压力,一开始搞一个网页上去了,过段时间再去返工效果是很差的。七牛云存储

说一下稳定性,最直观的指标是Crash率,我不太清楚在座的研发人员是否了解本身的移动服务的Crash率是多少。这个数字说出来很惊人,两年前咱们安卓加iphone是1.6%。也就是说一百次启动里面就有1.6次Crash,这个是很是痛苦的一个体验,如今的确有一些大牛们在这方面下了功夫,我给你们同步一个数据,是跟支付宝的基础负责人沟通时,了解到去年十一月份他们的ios加安卓平均Crash率达到了万分之二,一万次才有两次,两次包含了全部的状况。缓存

如今,大多数的应用有过几个版本的迭代和正常维护流程,基本是千分之几或者是十几的概念,到了十几的概念是没有什么进展了。咱们对稳定性这方面是否是有一些直观的认识?好比说一万次里面,不算用户的,若是说发现了一两次,计算的方法跟用户数没有关系。好比说咱们应用了一次Crash,心情好可能还会再打开,若是心情很差就直接关掉了,对产品是一个直接的影响。安全

d3.png

我先说一下安卓的稳定性建议,里面有不少工具,本身有代码检查工具,好比说Lint工具,种类有十几个类别,每个类别里面还有不少。我不知道咱们的开发人员有没有对它有一个直观的警告和认识,每一条其实都是有缘由的。关于稳定性有一个兼容的问题,好比说4.0的API在2.3里面使用了,就会提一个问题,会致使2.3的活动装上以后没法使用。服务器

Findbugs能检查不少问题,越界或者其余的一些问题,这个地方每每是可以作一些最初的判断。由于不少状况你们都经历过,咱们的应用发出去以后就像泼出去的水收不回来。可是咱们又没有遇到的话,很是的不幸。早期还好,几百个用户没有问题,Crash没有关系,可是若是说微信如今出这么一个问题就成为业界笑话了。微信

关于流程的个有两个工具,第一个是Reviewboard,好比说我这个团队历来没有出过事故,我能够继续作,可是我所知道的团队都出过事故。还有一个是架构清晰的逻辑分层,这个事情说出来很容易,可是作出来比较难。网络

d4.png

我们接着谈性能,用户等待时间七秒和三秒的演变,iPhone第一代的时候,乔布斯引领的苹果团队作过一个体验,一个页面或者一个UI用户最多能够等多长时间是有耐心呢?答案是七秒,这是2005年仍是2006年的时候,可是如今3秒不出来,我就认为你是出问题了。性能对一个移动应用来讲是很是关键的,谈到影响性能的因素有哪些,这个地方我列了一下:多线程

d5.png

好比我买了一个很便宜的手机,已经有四五年了,我很珍爱它,还在用,这个时候会出现稳定性的问题,为何我把这个状况列在第一位?由于它是直接相关,性能这个地方的比例是最少的,统计来说一两年就会换一个手机,性能差致使一些游戏跑不起来是没有办法的,网络IO占了很大一部分,咱们前面的嘉宾也介绍了不少云的服务,有不少云的创业项目和产品,其实这个是对优化咱们产品性能有帮助的,IO没有问题。若是我传一兆和1K,确定是1K更快一些。

第四个是说咱们第三方登录,这个地方咱们曾经出现过问题。早期的时候咱们作联合登录,咱们作定位,最先的是关于定位方面,我仅仅须要十秒。如今慢慢的也就行了,这方面也是缘由之一。

关于性能的建议,这一块说一下图片缓存和网络、数据量以及应用代码和服务器的性能。图片缓存每次分享都会说这个问题,这个跟应用是息息相关的。关于图片缓存是这样的,以前有朋友说个人应用优化不少,每次很慢。可是我发现他们的图片是这样存的,把图片的URL放到数据库里面,把本地的路径放在里面,每次显示图片的时候用URL查询一下,每次滑动的时候老是卡,不少人都知道IO性能是很是慢的,这多是一个笑话,如今这种作法不用查数据库,就能够判断文件在不在的状况。

还有一个状况是作了一个现成的框架,能够去设置,还能够对你容量大小的缓存设置一百兆或者多大均可以,咱们以前作应用开发的人,都作过相似于这样的事情,最后都纷纷放弃了本身原来的那套,或者作一些适应性的调整,其实这是主要问题的一些集中,就像作过推送、聊天的人都知道里面的坑实在太多了。

再一个是优化咱们的网络,好比说部署和CDN等等,这里咱们有一个亲身体验。好比说作移动互联网开发或者移动平台的人,对服务端架构不是很清楚,能力怎么样不少时候也不会提出来。不少时候会有一个很是明显的提高,好比说文本有20%、30%的压缩率,只有1K的20%到30%,这是最简单的优化,可是作的人也不见得多,可是这个是必需要作的。

第二个是关于图片,我以前是在糯米,跟普通的电商没有区别,有太多的图片须要显示,2G、3G的网络下显示很是困难,图片的方式有不少压缩,第一是使用模块,好比说在手机上快速浏览的时候,最大容忍最低的图片质量是多少?最开始的时候,实际上是90%,默认的。100 *100的图片须要十几K或者20K,如今2K网络下平均速度是两到3K,因此这个地方对图片自己的压缩,好比把质量调整到40%,快速滑动是看不出来的。这个对网络IO、对服务的带宽、对手机流量都是一个很大的节省。第二种图片压缩是图片的金字塔,其实最先作的就是地图,最大比例是图片最大,在手机上也是同样的,咱们彻底能够把这个东西作成离线化,处理全部的图片,适应手机的分辨率,对于手机来讲,不须要下载多余的,这个也能提升性能。还有一个是ios、安卓在项目输出的时候,咱们团队都有UI,或者是干UI的那么一我的会输出。咱们全部的图片是否是都压缩了呢?好比说不少用户下载失败了等等的问题,因此说Pngout是主要的工具。

而音视频这一块,像YY、优酷、爱奇艺其实也同样,视频上去有离线的数据处理中心,都会作一些视频的处理,咱们在看视频的时候,用手机上是流畅,家里用无线是1080P。每次切换的时候都会作一些压缩,分辨率也会有压缩。好比说我上传的时候,本身拍一个视频,我拍一分钟是几百兆,可是像YY这种,你们有用过YY的视频客户端或者QQ视频,其实流量很省,是对整个作了研究的。

优化本机的性能是应用代码,多线程你们不少在用,可是不知道清不清楚,好比说我在手机上跑一千多个多线程,这些线程是否是轮转到它呢?或者时间够不够?咱们的应用界面有多少是真正须要去作?好比说UI界面来说,最底下的设置了一个背景,在它上面咱们给它叠加了不少层,每一层都是这个背景,UI测试的时候,或者说咱们提到的单元测试、人工测试的时候以为是对的,可是对于CPU来讲这么多层,最底下的根本就没有显示,或者没有必要显示,刚才我提到了另一个例子,图片的缓存是否是在?我只要作一个转换就能够了。

还有一个是合理的使用硬件加速,这个级别是不同的,这里会有一个新的问题,即这个平台上的硬件支持,在另一个平台不支持,用这个硬件最好的仍是厂商,由于它只负责本身的硬件,可是对于我们作开放APP的话,这个地方要慎重。我给你们举一个例子,我不知道你们是从哪一个版本的百度地图开始使用的,2.0和如今的绘图是不同的,地图绘制起来很是麻烦,一根线一个点一个面的画起来,很是的痛苦,这个地方我问过他们的技术人员或者产品负责人,我说为何用这个呢?由于咱们当时是在糯米的技术上作二次开发,他说他们作过一些分析,在通用的场景下适当的选择本身的用户。

优化算法这一块有些能够列出来,咱们如今作的一些名字规划,这里提一点咱们的业务,好比说我打电话给伍总、星星,其实都是名字规划的一种处理方法,并非他都知道,而是说咱们预先作了处理,由于处理一个名字须要九毫秒,很是痛苦。咱们优化了以后,处理十个名字也不会超过一个毫秒,这是算法的优化,可是对于处理的结果是不同的。

e1.png

兼容性这一块OS版本,是SDK版,在作移动开发的时候,必定要注意咱们适配的版本是什么,支持的平台是哪些?这是很是现实的问题,上图列了一下安卓系统的市场占有率,到2014年9月份,已经有不多的用户还在使用2.0了,这是OS一个较大的演变过程,系统更新的速度是很是快的。

e2.png

谈到开发工具了,也说一下相关的东西,说到设计这一块,它是咱们全部UI的源头,设计人员有没有同步显示在手机上?1080P的手机出来的时候,咱们说分辨率好高,作了一系列的图咱们看着很漂亮,在PC、投影和屏幕上,可是在手机上无法看,由于咱们的字体过小,看不到,因此腾讯这方面也是巨头提供的工具,作了PS Play,我但愿你们推荐一下。若是咱们UI没有作这个事情的话,咱们能够提升一下,是在同网络下的wifi传到手机上。

d6.png

适配这个问题也是很重要的,之前在联想采购适配的费用是七十万人民币,对于初创的企业很是难,有一些云测试平台,你们能够试一下,包括版本的适配、API的适配,分辨率也能够。网络兼容性这边设置网速,能够在电脑上模拟2G、3G甚至更高的网络测试,这样能够体验你应用的速度,这个速度仍是很是靠谱的。

d7.png

耗电量是服务端不须要关注的问题,机房电源很稳定,整个的保护措施也很好,断电是千载难逢的,主要的原件是CPU、屏幕,好比安卓里面有一个应用,点一下就能够知道。我最近有一个软件没有用它,它无形的跑到第一了,我无情的解决了它。若是说咱们的应用很不幸跑到第一名,除非我很是喜欢这个游戏,我每天玩。若是没有用的话,卸载率很高,我估计产品的负责人会很头疼。关于耗电量来讲,第一个是本身的服务一直在后台运行;第二个是推送方案有问题,好比说刚才说的聊天服务,他们在这方面会有一些考虑,包括从一个山头过另一个山头,好比说我在地铁上试一下,网络切换咱们会遇到,可是处理的方法是不同的;还有一个是大数据量的网络传输,若是我们的手机去保持一个连接,大概是十几毫安,若是说要开始传东西,稳定在三百到四百毫安;用手机下载一个东西是三百到四百毫安;屏幕常亮在100到150之间,因此数据压缩提高整个性能的时候,电量也是一种方法。

d8.png

这里就是一些经验和相关的东西,后台的服务部用时要关掉,避免频繁的唤醒;Sensor用完要关掉,Push方案这一块咱们的团队比较小,业务比较少的时候,尽量选择第三方的东西,任何一个团队除非是专门作推送的,很难作一套很好的推送方案,在到达率和网络占用各方面都考虑的时候,还有一个是网络IO。

d9.png

安全性这一块刚才也有好多人提到了,以前咱们有一个讨论,全部的应用均可以破解,只是说咱们愿意不肯意花这么大精力,对于电商来讲,一个永恒的话题是每次发起一个活动,用户作什么东西能够拿代金券或者现实的奖励,不少奖励都被黄牛拿走了,他从中牟利,这是一个行业,专门作这个事情,京东、天猫、美团都有专门的团队,这个是咱们安全性没有考虑的事情。工具的测试手机和PC这里,经过PC代理看一下本身的包,有的时候你看一下是触目惊心的,不少用户密码是经过明文传的,设置代理在同网站下走整个PC的网络。

d10.png

安全性我以为有几个东西你们能够考虑,第一个是HTTPS自己,不少协议都是走APP,都有一些关联的状况。在合理的状况下用HTTPS,它本身的性能不见得好,因此说要合理的使用;加密这一块有不少,还有一个是涉及到第三方工具以及反逆向工程,这一块是作最好的棋盘,作最坏的打算;可拓展性这一块可能一个产品经理提出需求的时候没有想太多,过几天的时候说我要改一下,若是说你写死的,必定是不行的,若是作了很好的分层,只是一个组合的问题,很容易的就解决了,一个分层是很是重要的,并且这个力度是对后续的贡献最大,这和服务端是同样的,UI和业务逻辑的分离尤为重要。

以上内容来自思必驰技术高级总监 苗顺平 在11月29日“开发者实践日技术沙龙”上题为《移动研发最佳实践》的分享。

顺便通知一下你们:开发者最佳实践日·第7期-互联网产品从设计到上线 上海站将于12月13日在上海创业者公共实训基地5号楼1层,EFG一楼举行,欢迎XX社区的各路猿们来相聚!

报名地址:http://qiniu-7.eventdove.com/

「开发者最佳实践日」是由七牛云存储发起并联合各方小伙伴为开发者举办的系列技术沙龙,关注开发者在实际应用中可能遇到的技术问题。致力于为敢于创新的开发者们提供行业内最前沿最热门的技术干货,以技术驱动应用创新,让更多的开发者享受技术带来的生活乐趣。

相关文章
相关标签/搜索