冬眠灵是什么药| 水逆退散是什么意思| 小腿疼是什么原因| 仰面朝天是什么生肖| 工装是什么| 9月24日是什么星座| 光什么夺目| 杨新鸣包贝尔什么关系| 什么什么一惊| 妙哉妙哉是什么意思| 白细胞计数偏低是什么意思| 溃疡吃什么药| 孕妇贫血吃什么补血最快| 吃维c有什么好处| 什么是钙化点| 大人有大量是什么意思| 99年属什么| 做水果捞用什么酸奶好| 支付宝余额和余额宝有什么区别| 开涮是什么意思| 立本是什么意思| 涛字五行属什么| 卵巢囊肿吃什么食物好| 上颌窦囊肿是什么意思| 检测毛囊去什么医院| 料酒可以用什么代替| 老放屁吃什么药好| 玉字是什么结构| 喝酒前喝什么不容易醉| 91是什么东西| 吞服是什么意思| 大腿根部痒是什么原因| 小学生什么时候放暑假| 1月15日什么星座| 荨麻疹是什么症状| 白头翁是什么意思| 左手指头麻木是什么原因| 脉沉细是什么意思| 肝火旺吃什么中药| 乙肝dna检测是查什么| 爸爸的姥姥叫什么| 跟腱是什么| 大姨妈可以吃什么水果| 水马是什么| 婚检能检查出什么| 豆工念什么| 什么是童子命| birads3类是什么意思| 胆囊息肉是什么原因造成的| 小孩子注意力不集中看什么科| 蹉跎是什么意思| 半元音是什么意思| 办身份证要穿什么衣服| 升阳举陷是什么意思| 二甲双胍缓释片什么时候吃最好| 腱鞘囊肿挂什么科| 红色玫瑰花代表什么意思| 覆水难收是什么意思| 毫不逊色的意思是什么| 右手手指头麻木是什么病的前兆| 下肢静脉曲张是什么原因引起的| 孕妇为什么会便秘| 淘宝什么时候成立的| 晒太阳补什么| 乳头痒是什么原因| 今天天气适合穿什么衣服| 腺管瘤是什么| mchc偏低是什么意思| 吃什么可以补钾| 什么叫语言障碍| h的大写字母是什么| 苏轼是什么派诗人| 什么鱼炖汤好喝又营养| bug是什么意思中文翻译| 中国的四大发明是什么| 化险为夷的夷什么意思| 不禁是什么意思| 大便前面硬后面稀是什么原因| ep是什么意思| 转移是什么意思| 厥逆是什么意思| 养老院靠什么挣钱| hrd什么意思| 登革热是什么| 赤砂糖是什么糖| 牙结石用什么牙膏最好| 炎性结节是什么意思| 胎儿胆囊偏小有什么影响| 浮生若梦什么意思| 古代天花是现代什么病| 送礼送什么水果| 脾虚吃什么食物| 什么药降尿蛋白| 体育精神是什么| 木加炎念什么| 促甲状腺激素偏高是什么意思| 地三鲜是什么| 真命题是什么意思| 烫伤挂什么科室| 蚊虫叮咬涂什么药| 三个水读什么| 11月30号是什么星座| 一个口四个又念什么| 突然流鼻血是什么原因| pct是什么材质| 什么是翘舌音| 骨穿是检查什么病| 唯我独尊指什么生肖| 白矾是什么东西| 浅表性胃炎用什么药| 梭子蟹什么季节吃最好| 什么是穿刺| 社保卡是什么样的图片| 脚后跟长痣有什么寓意| 胸椎退变是什么意思| 税号是什么| 财代表什么生肖| 为什么不愿意工作| 金字旁乐读什么| 头晕恶心想吐挂什么科| 世子是什么意思| 浮生若梦是什么意思| 霸王别姬是什么生肖| 沉贵宝是什么木| 什么犹如什么造句| 阴茎不硬吃什么药| naco是什么牌子| 多动症是什么引起的| 勃起困难吃什么药| 梦见买馒头是什么意思| 衣原体支原体感染有什么症状| 中年人手抖是什么原因| 看肠胃挂什么科室| 阴险表情什么意思| who是什么组织| 什么是童话故事| 很难怀孕是什么原因| 吃的多拉的少是什么原因| 梦见自己生病住院了是什么意思| vol是什么意思| 秦二世叫什么名字| 呕血是什么意思| pbo是什么| 为什么要拔掉智齿| 关节疼是什么原因| 烫伤后擦什么药好得快| 欣字属于五行属什么| 肿瘤最怕什么| 彪子是什么意思| 氟骨症是什么病| 女人肚子大是什么原因| 垮掉是什么意思| 黑洞是什么意思| 梦到买房子是什么意思| 硬皮病是什么病| 奔波是什么意思| 什么中药能降血压| 什么是痉挛| 每天一杯蜂蜜水有什么好处| 卵巢早衰吃什么药调理最好| 男人喜欢什么样的女人做老婆| 孕妇吃什么长胎不长肉| 眼睛大小不一样是什么原因| 勿忘心安是什么意思| 什么是反流性食管炎| 孤独症有什么表现| 长期喝枸杞水有什么好处和坏处| 天蝎属于什么象星座| 皮肤痒有什么特效药| 10000mah是什么意思| 什么运动瘦大腿| 细佬是什么意思| 星期一右眼皮跳是什么预兆| 甲功五项能查出什么病| 老年痴呆吃什么药| 糖尿病人能喝什么饮料| 加应子是什么水果| 盐酸左氧氟沙星片治什么病| 安之若素是什么意思| 肺部感染吃什么药| 伽是什么意思| 电瓶车什么牌子好| 再生牙技术什么时候能实现| 弓山文念什么| 不知所云是什么意思| 右手麻木是什么原因引起的| 多巴胺是什么东西| 嘴角发麻是什么病前兆| 这是什么表情包| 左眼皮一直跳什么原因| 欢什么喜什么| 西洋参吃了有什么好处| 日的偏旁有什么字| 化妆的步骤是什么顺序| 热气是什么意思| 手术后吃什么营养品好| 姓黑的都是什么族| 什么胆什么心| 权字五行属什么| 检查盆腔炎做什么检查| 菩萨是什么意思| wht什么颜色| 做肝功能检查挂什么科| 命中注定是什么意思| 右手无名指戴戒指是什么意思| 头上长了个包挂什么科| 敕令是什么意思| 血糖偏高可以吃什么水果| 6月14号什么星座| 小排畸是什么检查| 指甲硬是什么原因| 铜绿假单胞菌用什么抗生素| 迂回战术什么意思| 为什么胃酸会分泌过多| 眼圈发黑什么原因| 颈椎病用什么枕头好| 红霉素软膏和红霉素眼膏有什么区别| 左脸上长痘痘是什么原因| 唐朝什么时候灭亡的| style是什么意思| 为什么手术前要禁食禁水| 盐城有什么特产| 阴囊潮湿吃什么食物| 萎缩性胃炎吃什么食物好| 6月24号什么星座| 普惠性幼儿园是什么意思| 漏蛋白是什么原因造成的| 万能输血者是什么血型| 配伍是什么意思| 闻思修是什么意思| 离子四项是检查什么的| 大骨节病是一种什么病| 菟丝子有什么功效| 83年属什么生肖| 蝉鸣声耳鸣是什么原因引起的| 衣柜放什么代替樟脑丸| 邪教是什么| 错构瘤是什么| 吃什么养发| 辰砂和朱砂有什么区别| 身份证号码最后一位代表什么| 蓝色小药丸是什么| 费心是什么意思| 举不胜举的举是什么意思| 空调数显是什么意思| 冚家铲是什么意思| 后背有痣代表什么意思| 玹字五行属什么| 压疮用什么药最快能好| 药店属于什么单位性质| 日加一笔可以变成什么字| 心热是什么原因造成的| 清鼻涕是什么感冒| 子母环是什么形状图片| 塞翁失马是什么意思| 世外桃源什么意思| 做什么检查确诊是白塞| 可可尼女装什么档次| 肝掌是什么症状| 乙木的根是什么| 售馨是什么意思| 菏泽有什么好玩的地方| 线下培训是什么意思| 阻生智齿是什么意思| 百度

Jeep牧马人十年限量版曝光 将于上海车展首发

百度 观念。

在进行启动优化之前,我们先介绍一下小程序的启动过程。了解小程序的启动流程,可以帮助开发者更有针对性地选择性能优化的手段,分析性能优化的效果。

本文的启动流程以安卓和 iOS 为准,其他平台可能会略有差异。

注:小程序启动的各流程不是串行的,会尽可能的并行。计算总启动耗时不能简单的分阶段加和。

下列图片简要描述了部分情况下的小程序启动流程(注意:其中矩形块的宽度不与对应阶段耗时成比例)。

# 小程序启动流程示意图

开发者可以通过wx.getPerformance接口中 entryType 为 navigation,name 为 appLaunch 的指标(PerformanceEntry),获取页面切换耗时时。

小程序启动过程主要包括以下几个环节:

# 1. 资源准备

# 1.1 运行环境准备

小程序的运行环境包括小程序进程、客户端原生部分的系统组件和 UI 元素(如 导航栏、tabBar 等)、渲染页面使用的 WebView 容器、开发者 JavaScript 代码的运行环境、小程序基础库等等。

部分环境(如 JavaScript 引擎、小程序基础库)需要在执行小程序代码之前准备完成,其他的会在启动过程中并行进行。运行环境的准备时间相对较长(尤其是在低端设备上),会对小程序启动产生严重影响。

# 环境预加载

为了尽可能的降低运行环境准备对启动耗时的影响,微信客户端会根据用户的使用场景和设备资源的使用情况,依照一定策略在小程序启动前对运行环境进行部分地预加载,以降低启动耗时。

我们希望小程序启动时尽可能都使用到预加载的环境,但由于受到访问场景、设备资源状况和操作系统调度的影响,并不能保证每次小程序启动时都可以命中预加载的环境

# 对启动耗时的影响

运行环境准备耗时较长,如果启动时没有命中预加载的环境,对小程序的启动耗时会有明显影响。耗时长短与平台、设备性能、预加载比例有关。

  • 由于系统功能和启动流程实现的差异,通常安卓系统运行环境准备耗时要远高于 iOS。
  • 低端机系统资源比较紧张,预加载的环境会更容易被系统清理,导致预加载比例偏低。
  • 预加载比例越高,平均启动耗时一般可以越低。

这部分逻辑完全由微信客户端控制,开发者目前无法直接进行优化。

# 1.2 小程序相关信息准备

在用户访问小程序时,微信客户端需要从微信后台获取小程序的头像、昵称、版本、配置、权限等基本信息,以对小程序进行必要的版本管理、权限控制和校验等。

为了在保证信息实时性的前提下,尽量降低对启动耗时的影响,这些信息会在本地缓存,并通过一定的机制进行更新。

信息的获取和更新需要发起网络请求。请求分为两种情况:

(1) 同步请求:会阻塞小程序的启动流程,影响小程序的启动耗时。有以下情况需要进行同步请求:

  • 首次访问:用户首次访问该小程序(或小程序被清理)时,客户端没有缓存,需要同步请求小程序相关信息。
  • 同步更新:微信会在后台定期检查经常使用的小程序是否更新。如果启动时已知小程序有新版本,会同步更新信息。
  • 强制更新:用户长时间未使用小程序时,为保障信息的实时性,会强制同步更新信息。

(2) 异步请求:与启动流程并行,不影响启动耗时。主要发生在:

  • 异步更新:已使用过的小程序,定期检查暂未发现小程序有新版本,则优先使用本地缓存的信息完成启动,并异步进行更新。

# 对启动耗时的影响

在用户首次访问小程序、小程序版本更新或使用长期未使用的小程序时,信息的获取和更新会影响小程序的启动耗时,耗时长短主要与网络环境有关。

从大盘来看,小程序版本发布时,会导致启动时需要同步请求的比例上升,进而导致平均启动耗时的上涨。因此,建议开发者合理规划版本发布

这部分逻辑完全由微信客户端控制,开发者目前无法直接进行优化。

# 1.3 代码包准备

小程序启动时,需要根据用户访问的页面,从微信后台获取代码包地址,从 CDN 下载小程序代码包,并对代码包进行校验。根据小程序页面所在分包和使用的插件不同,一次启动可能需要下载多个代码包或插件包。

除了启动过程,代码包下载在页面跳转、预下载、使用分包异步化等过程中也会触发。

为了在保证用户尽可能访问新版本的前提下,尽量降低对启动耗时的影响,小程序代码包会在本地缓存,并通过更新机制进行更新。

和相关信息准备类似,代码包下载也会有同步和异步两种情况:

(1) 同步下载:会阻塞小程序的启动流程,影响小程序的启动耗时。有以下情况需要进行同步下载:

  • 首次下载:用户首次访问该小程序(或小程序被清理)时,客户端没有缓存,需要同步下载代码包。
  • 同步更新:对于小程序信息发生「同步更新」或「强制更新」的情况,如果检测到小程序版本更新,会同步下载代码包。

(2) 异步下载:与启动流程并行,不影响启动耗时。主要发生在:

  • 异步更新:对于小程序信息发生「异步更新」的情况,如果检测到小程序版本更新,会异步更新代码包。

为了降低代码包下载的耗时,我们采用了包括但不限于以下方式:

  • 代码包压缩:采用 Zstandard 算法对小程序代码包进行压缩,以尽可能降低下载过程中传输的数据量。
  • 增量更新:当代码包发生更新,不需要重新下载完整的代码包,只需要下载根据算法生成的体积很小的增量包进行更新。
  • 更高效的网络协议:下载代码包优先使用 QUIC 和 HTTP/2。
  • 预先建立连接:在下载发生前,提前和 CDN 建立连接,降低下载过程中 DNS 请求和连接建立的耗时。
  • 代码包复用:对每个代码包都会计算 MD5 签名。即使发生了版本更新,如果代码包的 MD5 没有发生变化,则不需要重新进行下载。

# 对启动耗时的影响

下载耗时是启动耗时中的重要瓶颈,在用户首次访问小程序或小程序版本更新时,代码包的下载会对启动耗时造成影响。耗时长短与网络环境,代码包压缩后大小,以及是否命中增量更新有关。

考虑到包大小对用户体验的影响,平台限制单个小程序代码包的大小上限为 2M。代码包上限的增加,对于开发者来说能够实现更丰富的功能,但对于用户来说也增加了流量和本地空间的占用。为了保证启动速度,开发者应该尽可能的控制启动时用到的代码包大小。具体方法可以参考《代码包体积优化》

# 2. 小程序代码注入(逻辑层)

小程序启动时需要从代码包内读取小程序的配置和代码,并注入到 JavaScript 引擎中。在主包代码注入过程中,会触发小程序的 App.onLaunchApp.onShow 生命周期。如果小程序使用了插件或扩展库,在注入开发者代码之前,还会先注入对应插件和扩展库的代码。

为了降低小程序代码注入的耗时,我们采用了包括但不限于以下方式:

  • Code Caching:在部分平台上,微信客户端会使用 V8 引擎的 Code Caching 技术对代码编译结果进行缓存,降低非首次注入时的编译耗时。

注意:如果代码中使用了 use asm,会导致 V8 的 Code Caching 失效。

# 对启动耗时的影响

小程序代码的注入耗时直接影响小程序的启动耗时。耗时长短与代码复杂度、同步接口调用和一些复杂的计算有关。如果未启用「按需注入」,耗时还会与启动使用到分包内的页面和自定义组件总数有关

由于「首页渲染」需要使用逻辑层发送的数据,如果小程序代码注入耗时过长,会延迟「首页渲染」开始的时间。建议开发者参考《代码注入优化》章节进行优化。

# 3. 小程序代码注入(视图层)

开发者的 WXSS 和 WXML 会编译成 JavaScript 代码注入到视图层,包含页面渲染需要的页面结构和样式信息。

我们采用和「小程序代码注入(逻辑层)」相似的方式优化注入耗时。

视图层和逻辑层的小程序代码注入是并行进行的

# 对启动耗时的影响

小程序代码的注入耗时直接影响小程序的启动耗时。耗时长短与当前页面结构复杂度和页面使用的自定义组件数量有关。如果未启用「按需注入」,耗时还会与启动使用到分包内的页面和自定义组件总数有关

由于「首页渲染」需要使用视图层的页面结构和样式信息,如果小程序代码注入耗时过长,会影响渲染数据从逻辑层到达视图层的时间,影响「首页渲染」的耗时。

虽然开发者不能直接修改视图层生成的 JS 代码,但是可以通过使用「按需注入」、移除未使用的自定义组件等方式降低这部分耗时。

# 4. 首页(初次)渲染

在逻辑层小程序代码注入完成后,小程序框架会根据用户访问的页面,进行页面组件树初始化,生成首屏渲染相关数据发送到视图层,并依次触发首页的 Page.onLoad, Page.onShow 生命周期。

首屏渲染相关数据包括 Page 初始化参数中 data 属性值,和部分比较早发出的 setData 数据(哪些 setData 可以计入首页渲染与渲染层和逻辑层之间的初始化时序相关,目前没有可以保证一定能够计入的情况)。

在完成视图层代码注入,并收到逻辑层发送的首屏渲染相关数据后,结合从初始数据和视图层得到的页面结构和样式信息,小程序框架会进行小程序首页的渲染,展示小程序首屏,并触发首页的 Page.onReady 事件。

如果开启了「初始渲染缓存」,「首页渲染」可以直接使用缓存完成,不依赖逻辑层的初始数据,降低启动耗时。

小程序框架层面,以 Page.onReady 事件触发标志小程序启动过程完成

# 对启动耗时的影响

首页渲染耗时是启动过程的最后一环,直接影响小程序的启动耗时。耗时长短与页面结构复杂度、参与渲染的自定义组件数量有关。建议开发者参考《首屏渲染优化》章节进行优化。

如果启用了「按需注入」,部分组件代码注入会被延迟到本阶段执行,导致阶段耗时上涨,但总耗时一般会下降。

# 5. 首屏内容展示

「首页渲染」完成后,小程序启动流程完成,Loading 消失,此时一般情况下用户应该能立刻看到首屏内容。

但是如果首页的主体内容依赖网络请求(例如 wx.request)等异步来源,用户并不一定能立刻看到有意义的完整界面,可能看到的仍然是白屏界面。需要等待网络请求异步返回后,调用 setData 进行页面更新,才能呈现真正的页面。

通常情况下,开发者也会选择先展示「骨架屏」来避免白屏,以优化用户体验。

# 对启动耗时的影响

异步 setData 触发绘制的首屏内容展示不一定会计入启动耗时统计,但是会延迟用户看到页面内容的时间,影响用户体验。建议开发者参考《首屏渲染优化》章节进行优化。

# 常见问题

(1) 为什么「开发版」和「体验版」小程序启动比「正式版」慢一些?

「开发版」和「体验版」小程序的启动流程和代码包下载链路会和「正式版」有所差别,也会有更严格的权限控制,因此启动耗时要慢于「正式版」小程序。

对于「开发版」小程序,为了方便开发调试,基础库会启用很多调试相关的能力,例如 vConsole、sourceMap 等,日志输出的等级也会更低,因此启动耗时和页面切换耗时也会有一定延长。

(2) 为什么安卓和 iOS 的启动耗时差异那么大?

两个平台的设备性能、系统功能和启动流程实现存在一定差异:

  • iOS 设备的平均性能要好于安卓;
  • iOS 小程序和微信共用进程,而 Android 上小程序运行在独立进程,需要额外的进程创建和一些基础模块的初始化流程;
  • iOS 上需要使用系统提供的 WebView 和 JavaScript Core,初始化开销几乎可以忽略;
  • 安卓 UI 和系统组件的创建的开销远高于 iOS。
血管病变是什么意思 眼前发黑是什么原因 什么是梅尼埃病 肝内胆管结石是什么意思 皮肤过敏擦什么药膏好得快
女生爱出汗是什么原因 小腹左侧疼是什么原因 五谷指的是什么 农历八月初五是什么星座 冒节子是什么东西
褥疮是什么 女右上眼皮跳是什么预兆 什么的马 ab血型和o血型的孩子是什么血型 甲壳素是什么东西
dpl是什么意思 眼眶周围发黑什么原因 胡萝卜什么时候种植 胚芽是什么 2pcs是什么意思
钓鱼执法是什么意思hcv9jop2ns8r.cn 什么是夹角hcv8jop2ns0r.cn 豆角没熟中毒什么症状hlguo.com 茶走是什么意思hcv9jop7ns9r.cn 藏风聚气是什么意思hcv7jop9ns1r.cn
ori是什么意思hcv9jop0ns8r.cn 湿气重吃什么药最有效cj623037.com 一失足成千古恨是什么意思hcv8jop2ns8r.cn 地什么人什么hcv9jop0ns8r.cn 手足口病有什么症状hcv9jop4ns1r.cn
胃消化不良吃什么药kuyehao.com 张的五行属性是什么520myf.com 休学是什么意思hcv8jop8ns5r.cn 宫腔回声不均匀什么原因hcv9jop6ns2r.cn 吃维生素e软胶囊有什么好处hcv9jop4ns8r.cn
平胸是什么原因导致的怎样解决hcv8jop8ns3r.cn 中央空调什么牌子好hcv9jop4ns6r.cn 胆固醇是什么东西hcv7jop7ns1r.cn helen是什么意思hcv7jop6ns3r.cn 炖猪排骨放什么调料gangsutong.com
百度