dingding

作者: leiming32 | 来源:发表于2016-07-04 16:42 被阅读0次

    上周五的时候,跟@大野一起吃饭,聊到了钉钉Android 2015 都做了些什么,达到什么效果,聊完以后,大野说 “擦,这个应该放到网上跟大家分享一下”,并给我规定了一个时间,周一搞定这个事情,今天上午忙完以后,我准备今天下午来这里分享一下钉钉Android的2015. 我先给大家分享一下钉钉Android 2015 取得了哪些成绩Crash率降低到万二,领先行业千一的水平

    在去年早些时候,我们做了一个功耗的测试,钉钉功耗全面优于微信、QQ


    聊天里大图片的浏览 流畅度 优于微信,大家可以下载附件里的一个superimage.zip里的这个图片,在钉钉的聊天、微信聊天、QQ聊天里打开这张图片,查看大图,来滑动一下大图,你会发现钉钉滑动更快。这里钉钉率先采用了分块加载技术。

    在大图浏览的时候,精确定位手指点击,放大有需求的区域,方便细节查看。当查看一个原图的时候,比如你想看左下角到底是什么内容,手指双击图片的左下角,你会发现你点击的区域不会消失,会放大这里,图片的上半部分可能不会显示,反之,你点击图片的上半部分的时候,上半部分会放大出来的。见下图,点击有框的部分,出来的效果,这个效果是微信和QQ都没有的


    Android IM 消息问题两小时定位,关于丢消息,或者状态不对的问题,我们可以两小时定位

    在Android上的冷启动,我们是优于微信。在手机上,杀死微信、钉钉,然后点击微信ICON,你会发现需要等待一会,才出来微信的Splash页面,钉钉的Splash页面是秒起,与QQ处于同一个水平。钉钉冷启动到列表页面页面3秒内可以完成,微信则需要5秒

    不停发送表情,钉钉顺畅地活着,微信死了。有A B两个手机,这两个手机分别装了微信,钉钉,从A手机不停地发送表情到B手机,我们在魅蓝手机品牌上,B手机上的微信死了,表情太多,处理不过来,换成钉钉,你会发现钉钉还顺畅而低调地接收着。

    聊天界面的流畅度,从感官上钉钉优于微信,并且滚动速度优于微信

    在6月份进行了OOM的优化,OOM的BUG减少了70%

    那么Android 2015我们都做了什么呢?Android完成了模块拆分,各模块间采取了接口依赖的方式,降低了以前开发的时候相互依赖,解决一个BUG,可能由于回归不全面而造成一些没有发现的BUG上线,同事个模块间采用aar的方式依赖,方便了模块版本的回退,不再通过代码回滚的方式来进行回滚。这里加速了大家的开发效率和质量

    引入FRESCO中的图片分配到native和一些native的bytearray重用思想,进一步降低了图片的内存空间,与内存碎片的问题,同时我们还做了FRESCO没有做的事情,那就是当新的机制不生效,如何进行降级的问题,比如FRESCO的SO加载失败,那么FRESCO就不会显示这张图片,钉钉Android里即使SO加载不起来,图片会分配到JAVA层,同样可以显示,还有就是byte array的降级,当native突然坏了,可以拷贝JAVA层,从natvie到native,从JAVA到native,从native到JAVA,从JAVA到JAVA,我们做了全面的降级兼容机制,这里已经超越了FRESCO以前的使用机制,体验更好

    建立了监控大盘,可以清楚地看到那个模块消耗流量、电量,更方便我们来维护钉钉的整体健康,同时也对我们线上的问题排查效率更快,可以看一下下边的流量饼图和电量饼图。


    形成性能闭环,在开发中进行数据收集,灰度中进行数据采集,线上进行监控,形成性能闭环在开发版本,我们会对泄漏进行检测,比如Activity 泄漏,Fragment泄漏,文件句柄没有关闭的检测等等,在同学进行开发的时候,就能发现各种可能存在的问题。



    在灰度版本中,我们会手机一些诸如流畅度的数据来分析我们APP的健康度



    在线上正式版,我们会生成流量饼图等数据

    WEB容器引入了HPM机制,从而使得我们的微应用像native app一样的流畅,同时我们还支持了H5的native导航栏

    简化了国际化字符串的复杂度,钉钉的默认自由是英文,而不是中文,很多时候,我们的同学在填写字符串的时候,只记得填写中文的字符串,而忘记了默认的字符串,从而导致切换到英文以后,可能由于找不到资源而崩溃。这里我们采取了简化方案,有一个字符文件,这个文件包括各种翻译,然后通过脚本去生存英文字符集,中文字符集等,同时还通过我们的美杜莎项目,可以从服务器端来下载翻译,达到多端统一的目的,下边是我们的字符文件的一个缩略图。


    建立了Trace系统,与悟空的火眼对接,可以很方便地看到每条消息的状态,加速了问题定位能力

    建立了端上的异常处理机制,主要包括内测不够了,磁盘不够了,进行磁盘释放、内存释放

    针对钉钉的VIP用户,我们建立了VIP报警机制,可以及时地看到VIP用户的使用情况,更好滴服务好VIP用户


    与测试同学一起,建立了4级灰度机制,将90%的BUG扼杀在正式版本之前,内部daily build,1K内测组,5WRC组,Pre-Release。内部daily build:主要是很对钉钉内部的同学进行使用
    1K组内测组:主要是包括共创用户,这里是包括外部用户的,有1000左右的内测用户
    5W RC组:包括1K内测组的,同时也是包括钉钉内部同学的,除此以外,还包括共创企业,目前只有2W的用户,我们的目标是5W的用户在这个组里
    Pre-Release:这里主要是在发布之前,我们会推送给大概10W用户,然后开始观察数据,通过motu来收集crash情况,通过我们的客服反馈来收集客服那里反馈的问题,在确定都没有问题以后,我们开始全面推送

    与测试同学一起,完善了测试体系,部分核心代码的单测、STC静态扫墓、自动化脚本、功能测试、性能测试、适配测试,这里还要提一下的就是,我们使用了test in来进行跑测试,每个迭代在代码第一次全部集成以后,就会每天到test in跑两次,每次100台机器,更好地发现crash和适配问题。

    ** **** 就先写到这里吧,感觉好多的东西,什么时候再回来丰富一下,one more thing,我把目前Android的一个整体设计图,附在下边吧,可以让大家全方位地了解钉钉Android。

    以上的成绩并不是我一个人来完成的,而是全体钉钉同学,包括Android同学,服务器端同学,测试同学等大家一起来完成的,非常感谢同学们在2015的努力与付出。 ** 接下来2016年,我们将会做些什么呢,其实2016年我们想做的事情很多,我这里写几个大的事情吧。Android瘦身,如果我们不瘦身,那么我们将成为App届的巨无霸,会给我们的用户直接带来流量损失,这里我们需要变得更苗条。

    多进程,让App跑的更健康

    非UI的代码单测达到80%
    By the way,如果有同学对我们已经实现的东西,或者我们尚未做的事情,感兴趣的话,我们可以来一起共同学习成长。

    相关文章

      网友评论

          本文标题:dingding

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