启动优化

  启动分析前端

  在真正动手开始优化以前,咱们应该先搞清楚从用户点击图标开始,...面试

  启动过程分析算法

  

  

  用户从桌面点击图标开始,会经历四个阶段前端框架

  

  T1 预览窗口显示。系统在拉起微信进程以前,会先根据应用的Theme属性建立预览窗口,固然若是咱们禁用预览窗口或者将预览窗口指定为透明,用户在这段时间依然看到的是桌面微信

  T2闪屏显示。在应用进程和闪屏窗口页面建立完毕,而且完成一系列inflate view onmeasure,onlayout等准备工做以后,用户能够看到flash架构

  T3主页显示。在完成主窗口建立和页面显示的准备以后,用户能够看到主界面框架

  T4界面可操做。在启动完成以后,应用会有比较多的工做须要继续执行,应用界面的预加载等等,在这些都完成以后才能够操做异步

  2.启动问题分析函数

  从启动流程的4个关键阶,咱们能够推测出用户启动过程会遇到的3个问题,这3个问题其实也是大多数应用在启动时可能会遇到的工具

  1.点击图标好久都不响应

  若是咱们禁用了预览窗口或者指定透明的皮肤,那用户点击图标以后,须要T2时间才能真正看到应用闪屏,对于用户体验来讲,点击了图标,过了几秒仍是停留在桌面,看起来像是没有点击成功,中低端机更加明显

  2.首页显示太慢

  如今应用启动流程愈来愈复杂,闪屏广告,热修复框架,插件化框架、大前端框架,全部准备工做都须要集中在启动阶段完成,上面说的T3首页显示时间对于中低端机来讲简直是噩梦

  3,首页显示后没法操做

  既然页面显示那么慢,那我能不能把尽可能多的工做都经过异步化延后执行呢?不少应用的确就是这么作的,但这会形成两种结果,要么首页会出现白屏,要么首页出来后用户根本没法操做

  不少应用吧启动时间结束时间的统计放到首页刚出现时,这对用户是不负责的,看到一个首页,可是停住十几秒不能滑动,这对用户来讲彻底没有意义,启动优化不能过于kpi化,要从真实体验出发,着重于从点击图标到用户可操做的整个过程

  启动优化

  咱们但愿启动期间加载的每一个功能和业务都是必须的

  1优化工具

  综合来看 systrace+函数插桩 是比较理想的方案,并且还能够看到系统的一些关键事件,例如:GC、System Sever/CPU调度等

  经过插桩咱们能够看到应用主线程和其余线程的函数调用流程,它的实现原理很是简单

  2.优化方式

  当拿到整个启动流程的全景图后,咱们能够清楚的看到这段时间内系统、应用各个进程和线程的运行状况

  具体的优化方式、咱们分为闪屏优化、业务梳理、业务优化,线程优化、GC优化和系统调用优化

  闪屏优化

  今日头条把预览窗口实现成闪屏的效果,这样用户只须要很短的时间就能够看到“预览闪屏”这种彻底“跟手”的感受在高端机上体验很是的好,但对于中低端机,会把闪屏时间变得更长

  合并闪屏和主页面的Activity,减小一个Activity会给线上带来100毫秒左右的优化,可是若是这样作的话,管理时会很是复杂,特别是有不少PWA扫一扫这样的第三方启动流程的时候

  业务梳理

   经过梳理以后,剩下的都是启动过程必定要用的模块,这个时候,咱们前期要“抓大放小” 经过算法进行优化,需注意过多的线程预加载会让咱们的逻辑变得更加复杂

  页面优化到后面,会发现一些架构和历史包袱会拖累咱们前进的步伐,比较常见的是一些事件会被各个模块监听,大量的回调致使不少工做集中执行,部分的框架初始化“太厚”

  线程优化

  线程的优化主要在于减小CPU调度带来的波动,让应用的启动时间更加稳定

  从具体的作法来看,线程的优化一方面试控制线程数量,线程数量太多会相互竞争cpu资源,所以要有统一的线程池,而且根据机器性能拉控制数量

相关文章
相关标签/搜索