梦见死人和棺材预示着什么| 九月23日是什么星座| 梦见死去的姥姥是什么意思| 为什么嘴巴会臭| 不亚于是什么意思| 缺钾什么症状| 痔疮为什么不建议手术| 为什么会一直打嗝| 梦见做被子什么意思| 属猪的幸运颜色是什么| 超七水晶是什么| 为什么耳朵总是嗡嗡响| 很轴是什么意思| 根有什么作用| 天罗地网是什么意思| 一什么蜘蛛| 黄瓜又什么又什么| 考教师资格证需要什么条件| pvd是什么意思| 琳五行属什么| 艾滋病人有什么特征| 什么时间容易怀孕| 儿童拉肚子吃什么药| 什么的点头| 北京西单附近有什么好玩的| 西洋菜是什么菜| 迷瞪是什么意思| 吃什么可以提高免疫力和抵抗力| 尿酸高是什么引起的| 41岁属什么| 爱情和面包是什么意思| 螚什么意思| 紫色代表什么| 吃杏仁有什么好处| 荷叶泡水喝有什么功效| 菠萝蜜什么季节最好吃| 辣乎乎的什么| 舌苔发黄是什么原因引起的| 人中龙凤是什么意思| 吃猪腰子有什么好处和坏处| 宅基地是什么意思| 鹿晗和邓超什么关系| 兔头是什么意思| philips是什么牌子| 什么时候上环是最佳时期| 气虚用什么泡水喝好| 忧思是什么意思| 天经地义是什么意思| 总胆汁酸是什么意思| 阻生齿是什么| 郭富城什么星座| 梦见鬼是什么意思| 肌酐低是什么意思| 丰胸吃什么食物有效果| 去除扁平疣用什么药膏| 舌头发麻是什么情况| 云雾茶属于什么茶| 打假是什么意思| 女性吃大肠有什么好处| 费气肿要吃什么药| 心脏右束支传导阻滞是什么意思| 痛风什么感觉| 蜗牛吃什么| 卵巢囊性结构是什么意思| 查胆囊挂什么科| 垂涎什么意思| 世界杯是什么时候| 女性尿臭味重是什么病| 雨中漫步是什么意思| 鲁迅是什么样的人| 消化不良吃什么水果好| 什么人不能吃榴莲| ab型血可以给什么血型输血| 胃袋是什么| 缺钾吃什么食物补得最快| 血小板太高会导致什么| 幽门螺旋杆菌的症状是什么| 老古董是什么意思| 炒作是什么意思| 肩膀疼是什么原因引起的| gc是什么| 四月十五什么星座| 1945年属什么| 花椒水泡脚有什么好处| 低筋面粉可以用什么代替| 胃受凉了吃什么药| 什么的绿叶| 脸上有红血丝是什么原因| 伊丽莎白雅顿什么档次| 外阴瘙痒是什么病| visa卡是什么意思| 红薯什么时候传入中国| 献血有什么好处和坏处| 打疫苗挂什么科| 备胎是什么意思| 上海话册那是什么意思| 脾不好吃什么药| 急性乳腺炎是什么原因引起的| 一如既往什么意思| 心电图显示窦性心律是什么意思| 被子植物是什么| 精华液是干什么用的| 什么鱼最迟钝| 隋朝之前是什么朝代| 头晕冒冷汗是什么原因| 尿中红细胞高是什么原因| 一什么好字| 陨石有什么作用和功效| c是什么单位| 屏幕总成带框和不带框有什么区别| 什么风大雨| 便溏什么意思| 西太后手表什么档次| 格格不入是什么意思| 人又不人鬼不鬼是什么生肖| 红细胞数目偏高是什么意思| 一什么花| 圆珠笔是什么笔| 三世诸佛是什么意思| 什么叫代孕| 茶禅一味是什么意思| 7月1号什么星座| 来事吃什么水果好| 提高免疫力吃什么| 坤沙酒是什么意思| 银手镯为什么会变黑| 治妇科炎症用什么药好| 猪蛋是什么| 右眼皮跳什么原因| 月子期间能吃什么水果| 银屑病用什么药最好| 女人晚上盗汗是什么原因| 副县长是什么级别干部| 蕾丝边是指什么意思| 乳岩是什么病| 党费什么时候开始交| 兔肉不能和什么一起吃| 很low是什么意思| 胃肠道功能紊乱吃什么药| 吃香菜有什么好处| 中国的国花是什么花| 超负荷是什么意思| 干净的反义词是什么| 慷慨解囊是什么意思| 硫化氢什么味道| 蛇胆疮是什么原因引起的| 生理期量少是什么原因| 阴虚便秘吃什么中成药| 鸟加一笔是什么字| 妙不可言是什么意思| 谷维素片治什么病| 哈尔滨有什么特产| 阎王是什么意思| 丰胸吃什么| 2008年属鼠是什么命| zoey是什么意思| 指甲很薄很软是为什么| 牡丹象征着什么意义| 此起彼伏是什么意思| 慢性肠胃炎吃什么药| 手机服务密码是什么| 酚妥拉明是什么药| 吃什么上火| 鸡胗是鸡的什么部位| 早泄是什么原因| 石家庄为什么叫国际庄| 细胞核由什么组成| 梅毒是什么病| 生肖鸡和什么生肖最配| 爱发朋友圈的女人是什么心态| 爱被蚊子咬是什么原因| 左肾结石的症状是什么| 嘚是什么意思| 保拉纳啤酒什么档次| 泪点低是什么意思| 汗手适合盘什么手串| 中国的母亲河是什么河| 丁二醇是什么| 囊性结构是什么意思| 达瓦里氏什么意思| 淋巴肿瘤吃什么食物好| 入肉是什么字| emg是什么意思| 冬占生男是什么意思| 为什么会抑郁| 什么叫网红| 打牙祭是什么意思| 7.12是什么星座| 荔枝有什么寓意| 冬至穿什么衣服| 你想什么| 血清和血浆有什么区别| 嘴巴里面起泡是什么原因引起的| 血压有点低是什么原因| 2.3是什么星座| 柳絮吃了有什么好处| 脸部肌肉跳动是什么原因| 后年是什么生肖| 梦见买豆腐是什么意思| 1884年属什么生肖| 补血吃什么好| 支气管扩张什么症状| lava是什么意思| 肚子怕冷是什么原因该怎么办| 淋巴细胞百分比高是什么意思| 病毒性肝炎有什么症状| 什么动物吃蛇| 什么是原则性问题| 丙球是什么| 香菜炒什么好吃| 什么是缘分| 千张炒什么好吃| 标王是什么意思| pr是什么缩写| 香菜炒什么好吃| 无毒不丈夫是什么意思| 辛字五行属什么| 准妈妈是什么意思| 肝病吃什么好得快| 牛黄是什么东西| 梦见头发长长了是什么意思| 为什么低烧比高烧可怕| 肛门下坠感是什么原因| 滑膜炎吃什么药最好| 肾结石有什么症状表现| 怀字五行属什么| 股票的量比是什么意思| 什么是领导| 安全总监是什么级别| 入盆是什么意思| 三条杠是什么牌子| 6月14日是什么星座| 射精出血吃什么药最好| 乘风破浪的意思是什么| 什么叫| 尿胆红素阳性什么意思| 恶心反胃想吐吃什么药| 病逝是什么意思| 翻白草治什么病| mmp是什么意思| 阴虚火旺是什么意思| nibpdia过高是什么意思| 什么人不适合吃榴莲| 睾丸潮湿是什么原因| 囧是什么意思| 3月30日是什么星座| 合欢是什么意思| 端庄的意思是什么| 苗子是什么意思| 黄体什么意思| 肝脏低密度灶是什么病| 1月27日是什么星座| 严重失眠吃什么药管用| 软助什么意思| 听吧新征程号角吹响是什么歌| 春暖花开是什么生肖| 负距离接触是什么意思| 什么是八字生辰八字| 12月20日什么星座| 鱼加它是什么字| 痛风吃什么药治疗最有效| 柚子什么时候成熟| 胃炎吃什么最好| 九月29号是什么星座| 百度

【丰田RAV4 2018款 荣放 2.0L CVT两驱风尚X版报价】丰田RAV4报价

百度 上腹部疼痛,却以为是带状疱疹引起的,没有及时诊治,致使鱼刺在体内“作怪”一个多月,形成脓性包块,破溃后,引发感染,险些酿成大祸。

页面切换的性能影响用户操作的连贯性和流畅度,是小程序运行时性能的一个重要组成部分。

# 1. 页面切换的流程

要想优化页面切换的性能,有必要先简单了解下小程序页面切换的过程。页面切换流程如图所示:

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

当切换的目标页面已加载完成时(例如:路由类型为 navigateBack,或 switchTab 到一个已加载的页面),不需要进行「视图层页面初始化」和「目标页面渲染」,「逻辑层页面初始化」也会较为简化,如下图所示:

# 1.1 触发页面切换

页面切换的流程,从用户触发页面切换开始。

触发时间对应 PerformanceEntry(route) 中的 startTime。

页面切换可能由以下几类操作触发:

  • 小程序API调用:开发者根据用户操作,调用 wx.navigateTowx.navigateBackwx.redirectTowx.reLaunchwx.switchTab 等 API。
  • 用户点击 <navigator> 组件进行页面切换。
  • 用户点击原生 UI 触发:例如点击 tabBar(自定义 tabBar 除外)、点击左上角「返回首页」按钮、点击系统返回键或左滑返回等。
  • 小程序热启动时自动 reLaunch:小程序热启动的 B 类场景

目前后两种情况暂时未能获取准确的触发时间,PerformanceEntry(route) 的 startTime 和 navigationStart 一致。

# 1.2 加载分包(若有)

如果页面切换的目标页面在分包中,页面切换时需要下载分包,并在逻辑层注入执行分包内的 JS 代码。

小程序生命周期内,每个分包只会在逻辑层注入一次。

# 1.3 视图层页面初始化

小程序视图层的每个页面都是由独立的 WebView 渲染的,因此页面切换时需要一个新的 WebView 环境。视图层页面初始化主要会做以下事情:

  • 创建 WebView
  • 注入视图层的小程序基础库
  • 注入主包的公共代码(独立分包除外)
  • (若页面位于分包中)注入分包的公共代码
  • 注入页面代码

为了降低视图层页面初始化的耗时,在页面渲染完成后,通常会进行必要的预加载供页面切换时使用。预加载主要会做以下事情:

  • 创建 WebView
  • 注入视图层的小程序基础库
  • 注入主包的公共代码(若主包已在本地)

如果页面切换过快,或预加载的环境被回收,则需要在页面切换时重新创建环境。

如果页面切换时有预加载好的环境,可以大大降低页面切换的耗时。

当切换的目标页面已加载完成时,不需要进行本阶段。

# 1.4 逻辑层页面初始化

完成分包加载和 WebView 创建后,客户端会向基础库派发路由事件。

基础库收到事件后会进行逻辑层的页面初始化,包括触发上一个页面的 onHide/onUnload、页面组件树初始化、更新页面栈并生成初始数据发送到视图层,并依次触发目标的 onLoad, onShow 生命周期。如果启用了「按需注入」,这一阶段还会注入页面代码。

基础库收到事件的时间对应 PerformanceEntry(route) 中的 navigationStart,对应 PerformanceEntry(firstRender) 的开始时间。

当切换的目标页面已加载完成时,不需进行页面组件树初始化和初始数据的发送,且不会触发目标页面的 onLoad

# 1.5 目标页面渲染

页面切换的目标页面不存在时,会触发页面的首次渲染。

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

视图层渲染完成,触发页面 onReady 事件的时间,对应 PerformanceEntry(firstRender) 的结束时间。

当切换的目标页面已加载完成时,不需要进行本阶段。

# 1.6 页面切换动画

页面渲染完成后,客户端会进行页面切换的动画(如:从右向左推入页面)。如果页面初始化和渲染的时间超过固定时间,为避免用户以为页面无响应,页面会提前推入。

页面推入动画完成的时间,对应 PerformanceEntry(route) 的结束时间。

# 2. 如何优化页面切换

# 2.1 避免在 onHide/onUnload 执行耗时操作

页面切换时,会先调用前一个页面的 onHide 或 onUnload 生命周期,然后再进行新页面的创建和渲染。如果 onHide 和 onUnload 执行过久,可能导致页面切换的延迟。

  • ? onHide/onUnload 中的逻辑应尽量简单,若必须要进行部分复杂逻辑,可以考虑用 setTimeout 延迟进行。
  • ? 减少或避免在 onHide/onUnload 中执行耗时逻辑,如同步接口调用、setData 等。

# 2.2 首屏渲染优化

页面首屏渲染是页面切换耗时的重要组成部分,优化手段可以参考启动性能优化中首屏渲染优化部分。

# 2.3 提前发起数据请求

在一些对性能要求比较高的场景下,当使用 JSAPI 进行页面跳转时(例如 wx.navigateTo),可以提前为下一个页面做一些准备工作。页面之间可以通过 EventChannel 进行通信。

例如,在页面跳转时,可以同时发起下一个页面的数据请求,而不需要等到页面 onLoad 时再进行,从而可以让用户更早的看到页面内容。尤其是在跳转到分包页面时,从发起页面跳转到页面 onLoad 之间可能有较长的时间间隔,可以加以利用。

# 2.4 控制预加载下个页面的时机

基础库 2.15.0 开始支持,仅安卓。低版本配置不生效。

如 1.3 节所述,小程序页面加载完成后,会预加载下一个页面。默认情况下,小程序框架会在当前页面 onReady 触发 200ms 后触发预加载。

在安卓上,小程序渲染层所有页面的 WebView 共享同一个线程。很多情况下,小程序的初始数据只包括了页面的大致框架,并不是完整的内容。页面主体部分需要依靠 setData 进行更新。因此,预加载下一个页面可能会阻塞当前页面的渲染,造成 setData 和用户交互出现延迟,影响用户看到页面完整内容的时机。

为了让用户能够更早看到完整的页面内容,避免预加载流程对页面加载过程的影响,开发者可以配置 handleWebviewPreload 选项,来控制预加载下个页面的时机。

handleWebviewPreload 有以下取值

  • static: 默认值。在当前页面 onReady 触发 200ms 后触发预加载。
  • auto: 渲染线程空闲时进行预加载。由基础库根据一段时间内 requestAnimationFrame 的触发频率算法判断。
  • manual: 由开发者通过调用 wx.preloadWebview 触发。开发者可以在页面主要内容的 setData 结束后手动触发。

例如:

在 app.json 中(作用于全局控制)

{
  "window": {
    "handleWebviewPreload": "auto"
  }
}

或在页面 JSON 文件中(只作用于单个页面)

{
  "handleWebviewPreload": "manual"
}
Page({
  onLoad() {
    this.setData({
      fullData: {}
    }, () => {
      // 只有配置为 manual 时需要调用
      wx.preloadWebview?.()
    })
  }
})

如下图所示,假设某小程序主页完整内容是分了三个 setData 进行的:

脚爆皮是什么原因 甲钴胺片是什么药 龈颊沟在什么位置图片 中暑什么症状表现 咳嗽喉咙痒吃什么药好得快
孕妇可以吃什么零食 兑卦五行属什么 走马灯什么意思 什么是兼职 其可以组什么词
植脂末是什么东西 福不唐捐什么意思 尿潜血挂什么科 血稠吃什么药最好 尿路感染吃什么药最好
x代表什么意思 鼻子经常流鼻涕是什么原因 刮痧是什么原理 cva医学上是什么意思 品保是做什么的
27属相是什么生肖hcv8jop3ns2r.cn 结婚14年是什么婚hcv8jop2ns8r.cn 乳房胀痛是什么原因引起的hcv9jop8ns1r.cn 感冒有痰吃什么药hcv9jop0ns7r.cn 什么情况下要做肌电图hcv7jop4ns8r.cn
口干舌燥吃什么药最好hcv8jop8ns9r.cn 生吃大葱有什么好处和坏处hcv8jop1ns4r.cn 乌克兰和俄罗斯为什么打仗hcv8jop6ns6r.cn 肾腺瘤是什么病严重吗hcv8jop5ns9r.cn 摩羯座的幸运色是什么hcv8jop0ns1r.cn
谜底是什么意思hcv9jop5ns4r.cn 独守空房是什么意思hcv8jop0ns6r.cn 华丽转身是什么意思hcv8jop3ns0r.cn 精液有血是什么原因hcv7jop6ns4r.cn 蕾丝边是什么意思hcv8jop1ns1r.cn
什么时候拔罐最好hcv9jop8ns0r.cn 上呼吸道感染用什么药hcv8jop7ns2r.cn bata鞋属于什么档次jasonfriends.com 艾滋病是什么症状hcv9jop3ns2r.cn 感恩节为什么要吃火鸡ff14chat.com
百度