范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

告别空窗白屏,飞猪客户端启动体感极致优化实践

  作者 | 飞猪技术团队
  审校 | 蔡芳芳 背景
  启动优化在客户端永远是一个绕不开的话题,几乎所有 APP 都持续在此投入精力,追求极致的秒出、直出。最近几年也一直有讨论几大头部 APP 启动快慢问题的声音出现,拼多多、支付宝都是业界公认在启动方面做的特别突出的。由此可见,APP 的打开速度,体感流畅性,用户内心已经默默记在了小本本上,甚至可能在潜意识里影响了他的打开行为。
  对于飞猪来说,首页是用户可见的飞猪首个页面,是全行业的流量入口,飞猪的门面,它给用户理解"飞猪是什么样子的"奠定了基调。业务设计和产品为了打造飞猪独特的心智、给予用户创新性的交互体验以及增加入口的吸引力,飞猪使用了大量的动图和视频能力,很多新颖的交互方式和设计在业界也具有独创性。
  可变高 banner 行程卡抽屉 顶部动画
  但是随着交互复杂度的不断增加,首页的渲染路径越来越长,页面结构层级越来越深,在交互复杂度上已经逐渐赶超手淘。这也导致首页体验的根基-性能,开始逐渐受到影响,如白屏、卡顿、闪动、加载慢等。以上问题已经逐渐影响到了用户的使用体感,因此针对首页性能问题的集中梳理与优化,已经迫在眉睫。
  双十一之前,我们针对以上问题进行了一波集中优化,包括启动速度和启动体感,最终基本达到了冷启动和首次安装全部直出的效果:
  冷启动:
  首次安装:
  启动度量方式演进启动时长
  业界最通用的度量方式,从启动开始,并设置某一时间点作为启动结束,通过埋点上报的方式统计 APP 的启动时长。它的好处是能够从宏观上来统计 APP 在所有用户上的启动时长,从而进行启动分析。问题在于结束时间点的设定,什么时间点能够认定为首页启动结束呢?是首页开始加载,还是首页上的元素全部加载完成,还是首页可交互?这没有一个标准的答案。而且这些数据是否能够完美代表用户的启动体感,这里要打一个大大的问号,比如启动过程中首页有一段时间的白屏,有几张图片没有加载出来,这些是很难通过启动时长来完整表达的。 分帧录屏
  分帧录屏示例:
  通过分帧录屏,能够比较清晰的分析 APP 启动过程中每一帧的状态,哪些帧是白屏的,哪些帧是空窗的,其他 APP 在启动过程中用了哪些"黑科技",通过这种方式都能猜出个大概。并且,这种方式是最接近用户体感的,如果从体感角度出发,能帮助我们发现大量之前没有发现的问题。在这种度量标准下,完美的启动就是以 16ms 为一帧,每一帧都完整有内容,无白屏无空窗。问题是这种方式很难从宏观角度分析问题,单个 case 波动较大。 启动时长+分帧录屏
  最好的启动方式是宏观的启动时长+微观的分帧录屏,二者结合起来,即能以用户为视角出发进行优化,也能从宏观上保证整体的启动性能。 优化方案
  本次优化将启动体感分为两个阶段,一是启动流程的优化,二是启动后首页交互优化。 启动流程优化
  根据这次的目标,要从效果上做到录屏逐帧肉眼直出,所以除了关注统计指标外,首次把录屏效果纳入进来,因此更要关注加载中的细节体感,数据为辅,以人的体感要求为目标。 1. 启动速度优化-启动项编排
  通过统一的启动调度器来管理启动任务,合理分配 CPU 资源,并按照任务类别进行合理的调度编排,以此来优化启动速度。
  如下图所示:启动编排最核心的是要梳理启动项的优先级以及依赖关系,找到满足最少必要依赖前提下的最长路径,然后对该路径上的节点一一进行优化,其余的启动项按照优先级安排在启动过程中并行执行。
  红色 是核心任务组,黄色 是阻塞任务组,绿色 是预执行任务组
  最终,我们梳理出了进首页前必须的阻塞任务共 26 个,他们执行过程中由于存在不可拆分的长耗时任务,以及依赖关系,会出现一些等待,因此预执行任务组中也有一部分任务会穿插进去填补这些空隙。
  进而我们可以得到目前飞猪启动阶段中的一条最长任务路径。可以看到,后续如果我们还能有对阻塞请求有策略或性能上的优化的话,那么启动速度就还能再加快一些。
  最终 90%设备启动耗时提升超过 1 秒。
  以上瀑布流均为进入首页前的启动项流程,对于进入首页后和首页并行的启动项,由京杭两地基础线与业务线的同学合作优化,结合业务场景,合理编排任务, 将首页前 3s 的帧率由 30-40 帧优化到 50 帧以上 。 2.缓存图片加载优化
  本地存在图片缓存的优化场景:
  1.  图片 load 加速 :启动阶段,即使图片在磁盘中,图片的寻址也非常慢。通过提前解析缓存数据,建立图片索引,能减少 几十到上百毫秒 的耗时。
  2.  view 预创建 :通过提前创建主体容器,将图片加载的时机提前。
  3.  图片加载优化:  我们使用的 phenix 图片库,经过手淘封装后,又被飞猪封装了一层,内部增加了许多逻辑判断,因此使用效率上要比原生的 phenix 要慢,我们跳过了封装库的使用,直接调用 phenix 加载图片,能 减少几十毫秒 的耗时
  4.  嵌套容器渲染滞后: 通过一定策略截取上一次的图片,绕过容器加载直接覆盖到指定位置,可实现模块的直出效果,并能够模拟点击。
  PS:以上问题在其他页面影响可以忽略不计,但在首页启动阶段,资源吃紧,小问题变大问题。 3.图片切换优化
  图片切换过程中,正常流程会将原图清除,待新图下载好后再渲染,导致存在一定时间的空窗期,造成闪白。 纯图场景: 纯图场景不纯在图文不符的问题,可延后原图的清除时间,作为 placeholder 覆盖,待新图下载好后可做到平滑切换。 图文场景: 图文同时存在,由于文字的渲染速度较快,必须将前图清除,否则会出现图文不符的问题,这种情况使用打底图覆盖,避免纯白背景。 4.完全无图片缓存
  常见场景:大促胶囊,榜单及其他动态模块。
  动态组件增加的场景,由于其不确定性,无法提前内置图片,无法遮盖,只能寄希望于网络速度。
  首页与二级页资源分配: 这种场景下网络资源异常重要,但同时也有二级页在做资源已经图片的预加载,因此需要合理按照优先级分配加载时机和带宽,平衡首页与二级页的优化效果。
  渐进式图片加载: 为了更快的内容填充,我们借鉴了微信大图浏览的图片加载方式。图片两段式加载,优先加载缩略图,原图下载成功后再替换。
  首页独立缓存区: 目前 APP 内所有的图片资源缓存都由图片库统一管理,在二级页浏览图片较多后,首页的图片缓存会被清理,考虑到首页图片的优先级较高,可开辟一块独立的首页缓存,不与 APP 中其他图片共享资源,保证缓存不被清理。 5.首次安装体验优化
  首次安装处于一个完全无缓存的情况,各个 APP 在这种情况下表现都不太好,会出现大面积的空窗。
  iOS: iOS 端飞猪在权限申请阶段,会有一个 idfa 浮层在上方遮盖,用户点击完成后首页已基本完成渲染过程,所以飞猪 iOS 端在首次安装场景下是天然直出的。 Android: Android 不存在 idfa 浮层,我们借鉴了 iOS 的场景,将闪屏的时间做了延长,规避掉了首次安装大面积白屏的问题。支付宝首次安装必须登录,所以不存在此问题。 启动后优化
  结合优化前收集到的槽点,我们把优化重点放在了信息流图片加载速度,进入首页前几秒的卡顿问题和首页资源管控上。 1.网络图片加载速度优化
  网络图片加载速度受网络速度影响,首页信息流快速滑动过程中,会有大量的承接页预加载请求和视频的缓存加载请求等等,极大的影响了网络加载速度。
  通过视频预加载优化与直出预加载优化减轻了信息流快速滑动过程中的网络压力,将网络图片的加载速度稳定在了 300ms 左右。
  信息流视频缓存控制流程如下:
  优化后效果如下:
  横轴是信息流图片加载数量,纵轴是图片加载耗时,橙线是优化后的效果
  2.首页启动项编排优化
  目前有较多的启动项任务在首页刚出现时开始执行,导致 APP 启动后首页在几秒内处于非常卡顿的状态。核心思路是将这部分启动项重新梳理,按照优先级放到合适的时机去执行同时又不对原有逻辑造成影响,避免大量启动项堆积造成的卡顿。
  优化后将首页启动后 3s 内的帧率从 10-30 帧稳定到了 50 帧以上 3.资源位管控
  之前首页 pop 没有针对运营配置高帧 gif 浮层做强管控,很可能上线不符合标准的资源导致首页卡顿,需要建立更加完善的管控机制。目前 CRM 加强了对图片资源的管控,可以针对不同图片类型限制图片大小,图片尺寸与格式限制,同时可以检测 gif 动图的帧率并对其进行限制。 4.首页 CPU 占用优化
  目前首页有多处使用 lottie 的场景,lottie 在正常播放过程中会占用一定的 CPU 资源,如首页顶部的刷新头,动画播放过程中会占用 30%左右的 CPU,哪怕是一个很小的 lottie 动画。且首页是常驻在 APP 的生命周期内的,会将这一影响带到其他页面。
  这次将首页的 lottie 场景全部统一收口改造,隐藏、离开页面、不在可视范围内等所有情况将所有 lottie 一律暂停播放。
  优化效果Android 端启动时间优化
  Android 端在优化完成后,90% 设备启动耗时加快了   1116ms ,缩短超过 1s。
  从上到下分别为飞猪、手淘、优酷、闲鱼、支付宝:
  优化前后对比-冷启动
  以下对比均来自 3、4 年前的设备,目前属于中低端机型。
  所有对比均已包含启动速度优化,无需对比启动速度。
  右侧视频为优化后效果-iOS
  设备:iPhone 11 Pro Max
  未优化之前的焦点图空窗时间较长,其他组件包括金刚,特卖和榜单也能明显的看到从白到加载的过程。优化后在用户能看到的第一帧开始,所有组件已经全部加载完成了。
  右侧为优化后的效果-Android
  设备:小米 CC
  Android 端之前的启动体验较差,会有大面积的白屏情况,现在可以做到首页的直出
  优化前后对比-首次安装
  右侧为优化后的效果-Android
  设备:vivo nex-3s
  针对首次安装的情况,我们同样做了处理,由于首次安装本地毫无缓存,所以不可避免的会出现较长时间的大面积白屏,预期让用户停留在白屏阶段,不如让用户"等一下",能够直接看到完整的首页。
  APP 横向对比-冷启动
  从左到右分别是飞猪、手淘、闲鱼、优酷、支付宝
  下面图片为方便对比,做了慢放处理
  设备:iPhone 11 Pro Max - iOS
  设备:vivo nex-3s - Android
  猪客和其他 APP 的分帧对比
  我们测试团队开发的视频分帧对比能力在本次优化中起到了重要作用,通过分帧对比,我们能够从细节中分析其他 APP 的优化方案,以及我们自身存在的问题,并逐步对齐并超越。目前该能力已基本完成了产品化,能够做到每日全自动录制多个 APP 的启动状态并给出分帧报告。在双十一期间首页变阵频繁,资源位、氛围变化大的情况下保证了首页能够及时发现问题并予以修复。
  分帧效果:
  后续计划
  性能治理和包大小治理一样,打江山容易守江山难,制定一套规范(交互规范,资源规范,开发规范)以及日常的监控措施,才能够让首页启动体验稳定保持,这才是这次首页体验优化的重中之重。 1. 体感标准度量与制订
  单纯的启动时长无法完整表达体感,结合视频分帧,能够更合理的模拟人的体感视觉。若能做到 16ms 的视频分帧,那么根据每次启动记录到的分帧数据,可以设立标准区分出正常帧与异常帧。异常帧可以是白屏帧,图片未加载出的空窗帧等等,完美的启动体验每一帧都是无白屏无空窗的。通过计算异常帧在总帧数中的百分比,可以设定一个体感标准。当然启动时长作为辅助指标,也应该在参考范围内。 2. 监控与维护
  通过设定体感标准,每天或每段时间进行一次自动化体感检测,若不符合标准,则进行体感报警,督促开发进行优化。目前能够做到每天自动化给出分帧报告,但是并不具备自动化识别能力,这也是我们下一阶段要做的事情。
  规范的制定同样重要,什么种类,优先级的组件要使用何种优化方式,复用方式,是否内置等等;所有的资源位图片大小的标准,gif 的标准,lottie 的标准,poplayer 的标准等等,需要严格制定与执行;在业务先赢的基础上,交互的复杂度最高水位在哪,不能无限制的追求交互的新鲜感而忽略最基础的体感。

真正的喜欢是有生理反应的你发现了吗?不管是男生还是女生,在喜欢一个人的时候,身体是有反应的。是眼睛总是绕着Ta转,耳朵听着和Ta有关的一切,是忍不住想有肢体接触,想拉拉小手,想拥抱,想亲吻。你看,你喜不喜我,日本姑娘,在中国生活6年,爱上中国,不喜欢日本大男子主义这是我们讲述的第619位真人的故事我是加藤彩子日本太太PangMama,平凡而普通的日本太太,一家三口已在中国生活了6年。我老公也是日本人,在上海日系企业做销售经理,儿子在当地中国特朗普最喜欢的报纸之一纽约邮报刊文特朗普不配再当总统环球网报道记者郭晓鹏特朗普1月6日的沉默应受谴责。当地时间22日纽约邮报以此为题发表社论,批评去年1月6日美国国会山发生骚乱之际,时任总统特朗普的所作所为,并称特朗普被证明不配再次男生喜欢你与想睡你有哪些不同表现?爱情如戏,有些人以诚信演戏,生活中有很多人特别渣,他们总是玩弄感情,而这些渣男渣女,却总会被人误以为是深情种。如果一个人的恋爱经历不足,那么总是会被渣男渣女欺骗,在爱恨情仇中迷失自不老男神林志颖,谎话连篇喜欢炫富,立人设却遭妻子拆台文娱趣追星记编辑娱趣追星记屡次说谎被质疑,林志颖是怎么一步步人设崩塌的?林志颖在娱乐圈中多年,和他同期的明星都慢慢变老,而他像被冰封了一样,丝毫不显老,看起来依然年轻。因此被称为不确保纾困政策切实惠及中小微企业中小微企业量大面广,有活力有灵性,是稳经济的重要基础稳就业的主力支撑。本版近期推出系列报道,并在人民网领导留言板开设意见建议征集专题页面,了解中小微企业经营难题。截至目前,收到留言马云,一个伟大的企业家?还是一个唯利是图的商人?马云的商业帝国是越来越大,随之而来的是越来越多的社会财富的聚集。作为一个商人无疑是成功的,毕竟是中国首富,但是随着商业版图的扩大,商人的唯利是图的本性也越来越明显。就拿支付宝的借呗学渣梅爱偲留学乌克兰,娶18岁高中生,住3000平豪宅,现在咋样文知心录编辑知心录住大别墅,豪车美女作伴,这是无数人都非常羡慕,却又可望而不可及的生活,但他却做到了。他就是梅爱偲,一个高考落榜不得不选择去乌克兰留学的学渣。他白手起家,创建公司修老祖宗女怕午时生,男怕子夜临,为何要怕?有科学依据吗?泱泱中华,万古江河。中华上下五千年历史,创造了无数的文化。其中俗语便是最接地气,最容易理解的一种文化。我国沿袭了两千多年的封建制度,封建制度的产生,必定伴随着思想的限制束缚。随着时语迟必显贵,步紧多受穷,是何意?老祖宗的识人术还受用吗?俗话,顾名思义,便是通俗易懂的语言,很多俗话,往往取材于生活,作用于生活,非常之接地气,人出生之后,除了学走路之外,最为重要的,便是学会说话。在旧时的农村,当发现有小孩子学说话学得1949年,上海解放时军代表包养国民党姨太,陈毅知道后怎么处理?1949年8月14日,时任上海市长的陈毅看着桌上一封死亡判决书,沉思良久,在犹豫了几秒钟之后。他对等待命令的上海公安局长李士英说这样的人如果不枪毙,那我们共产党在上海还有什么公信力
是何原因让斯巴达这个国度达到全民尚武男女皆兵的程度呢?在2000年的古希腊文明中,有哲学的光辉,也有浓郁的人文气息,与之相随的还有无数的战争。如果翻阅古希腊历史,在每一个阶段你都可以看到武力在历史进程中的作用。古希腊神话中的战神总是百港姐冠军晒泳装照!生完三个孩子身材依旧丰满,嫁富商住过亿豪宅本文编辑剧透社issac未经授权严禁转载,发现抄袭者将进行全网投诉都说最近20年的香港小姐选美质量大幅降低,相比上世纪80年代末和90年代初期的巅峰时期,确实是小巫见大巫。不过千禧好消息!陆续恢复!事关新疆铁路民航注意!注意!新疆的朋友请注意,从这个月1号开始,新疆将要恢复部分疆内的铁路运营。下面,我们就来一起看看详细内容。1时间从这个月1号,也就是12月1号开始。2恢复部分新疆疆内的铁路航冬季养生有道,5道家常暖身菜,滋补润燥,比秋裤还要暖和进入冬季以后日照时间持续缩短,降温成了天气主旋律,在这里提醒大家有一种冷,叫做忘穿秋裤饮食方面,我国民间有补冬习俗!吃点好的犒赏全家,不过也不能过分进补大鱼大肉,以免生燥生痰,应以天冷,用这3样炖一锅,有肉有菜,软糯鲜香又解馋,吃着真热乎一夜之间,广东进入了速冻模式,冷风吹得直哆嗦,这大冷天,就想吃点热乎的。今天逛市场看到一条非常漂亮的五花肉,立刻把它拿下,准备做一锅香喷喷的卤肉,想起都要流口水了。卤肉饭是台湾省的09曼秀古树茶500亩古茶园年产3000公斤易武七村八寨之一每周一三五更新!带你走进云南的99个古树茶村落09曼秀。上周,我们分享了3个村落9位茶农的信息,今天,我们还会再分享3个村落的茶农信息,这些村落分别是帕沙麻黑坝糯老曼峨忙肺景迈大寨暂居北京两个月,我好像明白了旅行的意义七月与安生剧照一直觉得,我应该算是一个浪漫主义的人。所以才会,借着实习的名义了解一座城市。01hr旅行是一个人的安静7月,我拿到了北京的实习offer。工作之余,我也偶尔出门逛逛。印在日本钞票上的男人140年前就研究中国,生前曾鼓吹侵华战争如果您喜欢这篇文章,请点击右上方的关注。感谢您的支持和鼓励,希望能给您带来舒适的阅读体验。他没有冲锋陷阵的战场厮杀,却是全面侵华的罪魁祸首,他藏在我们恨之入骨的战犯身后,奠定了日本鑫喆源创始人纪俊名,助力中国新能源汽车实现弯道超车进入2020年之后,国人对新能源汽车的需求,愈来愈强。而目前传统的销售模式,已经无法满足人们的需求。于是,利用移动互联网,打造新的销售模式,已经成为大家的共识。鑫喆源创始人纪俊名,我有一个让人变得幸福的小秘诀,你知道吗?我有一个让人变得幸福的小秘诀想要分享给你们,那就是学会数算生命中的恩典那些可能被我们忽视的小小的亮光。嗨,我叫信心,是小红书家庭园艺账号麦麦妈Abby的作者。从初次尝试栽种到花开满年底请客,多准备些好酒好菜,但这3种酒别带上桌,免得掉价年底将至,很多人差不多都会在这个时候宴请一下亲友聚一聚,或者请合作伙伴们吃吃饭喝喝酒,总结一下今年的情谊,尤其是家中有孩子的,这会儿差不多也要放假了,正好在家里热闹热闹。每到这个时