口干口臭是什么原因引起的| 为什么会得近视眼| 投胎什么意思| kyocera是什么牌子| 术后改变是什么意思| 农历又叫什么| 男怕初一女怕十五是什么意思| 里正相当于现在什么官| 白细胞十十是什么意思| 甲状腺密度不均匀是什么意思| 维生素b6主治什么| 九二共识是什么意思| 3月27号是什么星座| 真正的爱情是什么| 盆腔积液是什么意思啊| 腐男是什么意思| 咽炎吃什么药好使| 早晨起来口苦什么原因| 缠腰龙是什么病| 第一顺位是什么意思| 阴道息肉长什么样| 头皮屑结块是什么原因| 持续发烧不退是什么原因| 白斩鸡是什么意思| 男生的隐私长什么样| 怀才不遇是什么意思| 木乐读什么| 今天突然拉稀拉出血什么原因| ws是什么意思| 足字旁的字跟什么有关| 孕妇能吃什么水果最好| 阳性对照是什么意思| crp高是什么感染| 肠梗阻挂什么科| 男人脚底有痣代表什么| a型血可以接受什么血型| 头发发黄是什么原因造成的| 舒张压偏低是什么原因| 吃辣的胃疼吃什么药| 看结石挂什么科室| meme什么意思| 亚马逊是什么| 虚不受补吃什么中成药| 什么是华人| ct和磁共振有什么区别| 患者是什么意思| 淡奶是什么| 88年属什么| 晕血是什么原因| 试纸一深一浅说明什么| 争宠是什么意思| 小便发黄是什么原因| 吃葛根粉有什么好处| 正月二十是什么星座| 副高相当于什么级别| 粽叶是什么植物| 排便困难拉不出来是什么原因| 虚有其表的意思是什么| 一月2日是什么星座| 止血敏又叫什么名| 什么多么什么| 焦虑症吃什么中成药能根治| aosc医学是什么意思| abo血型是什么意思| 什么品牌的母婴用品好| 六月份是什么季节| 孕期心情不好对胎儿有什么影响| 经期可以吃什么水果| 大男子主义的男人喜欢什么样的女人| 卒中中心是干什么的| 角色扮演叫什么| 牛磺酸是什么东西| 囊性结构是什么意思| 脾肺两虚吃什么中成药| 什么竹水果| kiki是什么意思| 百草枯什么味道| 属鸡在脖子上戴什么好| 铁什么时候吃| 侃大山什么意思| 透疹是什么意思| 鼓上蚤是什么意思| 蹭蹭是什么意思| 脚底板脱皮是什么原因| 宫颈癌什么症状| 广西为什么简称桂| 叫什么名字好听| 精液的主要成分是什么| 脸上浮肿是什么原因导致的| 载脂蛋白b高是什么原因| 大姨妈每个月提前来是什么原因| 宫保鸡丁属于什么菜系| 这是什么虫| 梅菜是什么菜晒干的| 为什么说有钱难买孕妇B| 故步自封是什么意思| 把妹是什么意思| 医院属于什么行业| 孕妇吃鸡蛋对胎儿有什么好处| 低钾是什么原因造成的| 养什么鱼招财转运| 什么寒什么冻| 晚上喝什么茶不影响睡眠| 射手座是什么象| redline是什么牌子| 小人痣代表什么意思| 颈椎病应该挂什么科| 缺铁性贫血吃什么好| 口苦口臭吃什么药效果最佳| 炸膛什么意思| 黑裤子配什么颜色的鞋| 宝宝感冒吃什么药| 投资什么好| 璋字五行属什么| 葱长什么样| cold是什么意思| 杨桃是什么季节的水果| 舌头有红点是什么原因| 红线女是什么意思| 王字旁的字跟什么有关| 下肢水肿吃什么药| 中暑头晕吃什么药| 属鸡是什么命| 沙眼是什么原因引起的| 手术后不能吃什么| 梦见请客吃饭是什么意思| 北戴河在什么地方| 军校出来能干什么| 穿刺是什么| 产后可以吃什么水果| 滑膜炎吃什么药好| 门齿是指什么地方| 膝盖疼用什么药| 糖尿病的症状是什么| uma是什么意思| 乳房疼痛吃什么药| 指疣是什么病| 西岳什么山| 血糖高的人早餐吃什么| 奇怪的什么| 瓷娃娃什么意思| 高血压吃什么药最好| 不吃香菜什么意思| 走青是什么意思| 下焦湿热是什么意思| 男生小便尿道刺痛什么原因| 喉咙痛吃什么药好得快| b超挂什么科| 鼻尖出汗是什么原因| 三月生日是什么星座| 炼乳是什么| 看守所和拘留所有什么区别| 殇读什么| 脖子上长扁平疣是什么原因| 加油什么意思| 命硬是什么意思| ser是什么氨基酸| 丰富多腔的腔是什么意思| 喜上眉梢是什么意思| poem是什么意思| 雅戈尔男装什么档次| 脾胃湿热喝什么茶| 心字旁的字有什么| 看是什么意思| 小龙虾吃什么食物| 尿多尿频是什么原因| 脸两侧长痘痘是什么原因| 五月初九是什么星座| 入赘什么意思| 菩提心是什么意思| 7一9点是什么时辰| 什么人容易得类风湿| 鞭炮笋学名叫什么| 仰仗是什么意思| 扁桃体发炎什么症状| 小狗什么时候断奶| cln是什么意思| 科班出身是什么意思| 蜱虫咬了什么症状| 升结肠管状腺瘤是什么意思| 儿童头晕挂什么科| 梦到被猪咬是什么意思| 十月十日是什么星座| 系鞋带什么意思| 见字五行属什么| 萘普生是什么药| 布洛芬不能和什么一起吃| 疣是一种什么病| 梦遗太频繁是什么原因造成的| 肺痿是什么意思| 晶莹剔透是什么意思| 弱视是什么| 心肌损伤是什么意思| 郑成功是什么朝代的| 水淀粉是什么| ec50是什么意思| 心脏早搏是什么意思| 属鸡的幸运色是什么颜色| 疱疹吃什么药可以根治| 尿比重高是什么原因| 怀孕初期怕冷是什么原因| 石决明是什么| 天加一笔变成什么字| 中度贫血吃什么补血快| 宫是什么意思| 吃什么会影响验孕棒检验结果| b型血和b型血生的孩子是什么血型| dwi是什么意思| 金钱龟吃什么食物| 肾属于什么科| cold是什么意思| 骨头坏死是什么原因造成的| 虎的本命佛是什么佛| 请柬写伉俪什么意思| 情绪波动是什么意思| 宫颈糜烂有什么症状| c罗全名叫什么| 振水音阳性提示什么| 女团是什么意思| 为什么不能指彩虹| 飞机托运不能带什么| 6月15日是什么星座| 结婚证需要什么资料| 河北有什么市| 低钾血症挂什么科| 投影仪什么牌子好| 做梦怀孕了是什么意思| 脑内散在缺血灶是什么意思| 粥配什么菜最好吃| 百忧解是什么药| 缺锌吃什么| 什么什么的天空| 盛情难却是什么意思| 吃什么可以增加抵抗力和免疫力| 颈动脉斑块做什么检查| 什么是内卷| 胃反酸吃点什么能缓解| 粿条是什么| 什么什么归赵| 意什么风发| 吃什么对肾好| 仙草是什么草| 前列腺多发钙化灶是什么意思| 耳鸣和脑鸣有什么区别| 海参吃了有什么好处| 舌头白苔厚是什么原因| 煲什么汤含蛋白质高| 那是什么| 孤魂野鬼是什么生肖| 翻什么越什么| 有眼屎是什么原因| 胃恶心想吐是什么原因| 缺铁吃什么药| 中暑用什么药| 什么的蚂蚁| 脑梗做什么检查最准确| hav是什么病毒| 口臭严重吃什么药好得快| 重庆市长什么级别| 肱骨外上髁炎用什么药| 东北和山东有什么区别| 肾痛是什么原因| 7月15是什么星座的| 百合吃了有什么好处| 百度

人民币对韩元汇率报价多少?4月19日人民币对韩元

百度 第69分钟,奥斯卡左路内切后弧线球兜射直挂死角而入,2-2,上港再度扳平比分。

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

本文的启动流程以安卓和 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。
检查肚子挂什么科 什么是碱性食物 脑梗怎么形成的原因是什么 百思不得其解是什么意思 梦到自己杀人是什么意思
美女胸部长什么样 垂死病中惊坐起什么意思 日安什么意思 两岁宝宝拉肚子吃什么药 手腕比喻什么
来月经胸胀痛什么原因 支气管炎改变什么意思 为什么吃西瓜会拉肚子 衣衫褴褛是什么意思 辞退和开除有什么区别
尿微量白蛋白是什么意思 为什么有白头发 直男是什么意思 妇科炎症小腹坠痛吃什么药 脚烧热是什么原因
安慰的意思是什么hcv9jop1ns7r.cn 红色代表什么hcv9jop3ns7r.cn 破釜沉舟什么意思hcv8jop8ns0r.cn 咳嗽白痰吃什么好得快wmyky.com 龟裂是什么意思hcv8jop2ns8r.cn
梦见纸钱是什么预兆hcv7jop9ns0r.cn 非亲非故是什么意思cl108k.com 汪星是什么意思wmyky.com 咳嗽吃什么食物hcv9jop1ns6r.cn 为什么男人喜欢邓文迪hcv9jop2ns5r.cn
刚出生的小鱼苗吃什么hcv8jop4ns7r.cn 忏悔什么意思luyiluode.com 子宫肌瘤是什么症状hcv8jop1ns5r.cn 中伤是什么意思chuanglingweilai.com 吃什么润肺hcv8jop7ns2r.cn
准备要孩子需要注意什么hcv9jop1ns3r.cn 刺猬喜欢吃什么食物hcv9jop1ns5r.cn 头疼是因为什么hcv7jop9ns9r.cn 照身份证穿什么衣服hcv8jop5ns6r.cn 三道鳞是什么鱼hcv9jop3ns4r.cn
百度