当前位置: 首页 > news >正文

【小程序 - 大智慧】深入微信小程序的渲染周期

5.png


目录

  • 前言
  • 应用生命周期
  • 页面的生命周期
  • 组件的生命周期
  • 渲染顺序
  • 页面路由
  • 运行机制
  • 更新机制
    • 同步更新
    • 异步更新


前言

VueReact 框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数。

小程序中,生命周期主要分成了三部分:

  • 应用的生命周期
  • 页面的生命周期
  • 组件的生命周期
  • 在微信小程序第一次渲染结束后,利用 setData 修改数据不会导致生命周期变化(与 VUE 不同)
  • 只有当 路由发生改变,及页面跳转才会涉及到相关的生命周期改变

应用生命周期

属性说明
onLaunch小程序初始化 - 全局只触发一次
onShow监听小程序显示,从后台切回前台
onHide小程序切回后台
onError错误监听函数
onPageNotFound页面不存在监听函数
onUnhandledRejection未处理的 Promise reject 函数
onThemeChange系统主题变化函数

页面的生命周期

属性说明
onLoad页面加载时触发,可以获取页面参数(options),进行初始化操作
onShow监听页面显示,页面从后台切回前台
onReady页面渲染完成,可以进行DOM/动画操作(执行一次)
onHide页面隐藏/切回后台
onUnload页面卸载,当前页面栈出栈触发
onRouteDone路由动画完成

组件的生命周期

属性说明
created组件创建时执行,不能调用 setData
attached页面显示,可进行初始化操作
ready页面渲染完成,可以进行DOM/动画操作(执行一次)
moved组件实例被移动到另一位置
detached组件被卸载
error组件方法出错
show组件所在的页面被展示,在 Page onShow 前
hide组件所在的页面被隐藏在,Page onHide 前
resize组件所在的页面尺寸变化
routeDone组件所在的页面路由动画完成

组件自身生命周期在 lifetimes 定义,组件所在页面的生命周期由 pageLifetimes 定义。

渲染顺序

  • 应用 App 页面 Page 组件 Component

  • 进入:onLaunch(App) => onShow(App)

  • 初始化:created(Component)=> attached(Component)=> onLoad(Page)=> show(Component)=> onShow(Page)=> ready(Component)=> onReady(Page)

  • 页面隐藏:使用 pageLifetimes hide show 展示

  • 页面卸载:onUnload(Page)=> detached(B)

子组件先初始化,后卸载

页面路由

页面路由 | 微信开放文档

运行机制

小程序运行机制 | 微信开放文档

在这里插入图片描述

冷启动:首次打开/销毁后打开,小程序需要重新进行加载

热启动:后台切前台,即小程序还存在手机的任务管理器中

小程序运行机制中,需要注意的特性如下:

  1. 挂起状态,停止逻辑线程的执行,内存数据被保存,事件和接口回调会在下一次进入前台触发
  2. 30分钟挂起被销毁,占用资源过高被系统/微信客户端销毁
  3. 小程序被销毁前,可以利用 页面回调函数 onSaveExitState保存页面数据状态

更新机制

小程序更新机制 | 微信开放文档

开发者在管理后台发布新版本的小程序之后,微信客户端会有若干个时机去检查本地缓存的小程序有没有新版本,并进行小程序的代码包更新。但如果用户本地有小程序的历史版本,此时打开的可能还是旧版本。

同步更新

  1. 微信运行时,定期检查小程序是否有更新,如果存在,更新到最新版本后再打开小程序
  2. 若用户处于弱网环境、下载最新版本失败等情况下,仍会启动本地的较低版本

异步更新

  1. 小程序每次冷启动 会检查更新版本,发现新版本后,将会异步下载新版本的代码包。但本次启动仍会使用客户端本地的旧版本代码,即新版本的小程序需要等 下一次冷启动**** 才会使用。
  2. 如果发现本次更新的版本,可以利用代码强制更新
const updateVersion = () => {if (!wx.canIUse('getUpdateManager')) {return}const updateManager = wx.getUpdateManager()// 版本信息检查updateManager.onCheckForUpdate((res) => {console.log('版本信息', res)})// 新版本更新updateManager.onUpdateReady((res) => {console.log('准备更新版本', res)wx.showModal({title: '更新提示',content: '新版本已经准备好,是否重启应用?',success(res) {if (res.confirm) {// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启updateManager.applyUpdate()}}})})// 新版本下载失败updateManager.onUpdateFailed((err) => {console.log('新版本下载失败', err)})
}export default updateVersion

相关文章:

【小程序 - 大智慧】深入微信小程序的渲染周期

目录 前言应用生命周期页面的生命周期组件的生命周期渲染顺序页面路由运行机制更新机制同步更新异步更新 前言 跟 Vue、React 框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数。 小程序中,生命周期主要分成了三…...

《深入了解 Linux 操作系统》

在计算机领域中,Linux 作为一种强大而重要的操作系统,有着广泛的应用场景,尤其在服务器端占据着举足轻重的地位。 一、Linux 简介 Linux 是一种操作系统,主要应用于服务器端。不同的厂商或个人会对 Linux 的内核进行封装&#xff…...

批评他人也需要技术

俗话说“人无完人,尺有所短,寸有所长”,每个人都有可能犯错误。我们犯错误,并不能说明我们一无是处;一个人做了一件好事,也不能说他做的每件事都是好的。 营造良好的氛围。一说到批评,我们许多…...

安装SQL Server遇到的问题

出现了一和二的问题,最后还是通过三完全卸载sqlserver安装成功了 一.安装过程中依次报错 1.MOF编译器无法连接WMI服务器。原因可能是语义错误(例如,与现有WMI知识库不兼容)或实际错误(例如WMI服务器启动失败)。 2.PerfLib 2.0计数器removal失败&#xf…...

java项目之编程训练系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 编程训练系统的主要使用者管…...

MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root‘

MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root’ 安装MySQL的时候,到网上查的命令行登陆MySQL的方法都是mysql -u root -p password mysql -r root -p 123456但是奇怪的是这条命令我输进去死活都不对,它都会要求再输入一遍…...

vue使用vue-i18n实现国际化

我使用的是vue2.6版本,具体使用其他版本可以进行修改 一、安装 npm install vue-i18n -D 二、配置 1、文件配置 ①在src下创建 i18n 目录 ②在 i18n 目录下创建 langs 文件夹 和 index.js文件,具体如下 2、index.js代码如下,这里使用了…...

微信小程序如何设置左侧导航栏跟随页面滑动

一、使用 scroll-view 组件实现页面滚动 在页面的 wxml 文件中&#xff0c;将需要滚动的内容包裹在scroll - view组件内&#xff0c;例如&#xff1a; <scroll-view scroll-y"true" style"height: 800rpx;"><!-- 这里放置页面的主要内容 -->…...

个人小结(2.0)

离谱&#xff0c;困扰着几周的问题今天偶然发现了解决方法。 问题如下&#xff1a;就是对应的模块引入爆红&#xff0c;但是单击进入引入的文件没有问题 然后它的提示是&#xff1a; 无法找到模块“../views/screen/index.vue”的声明文件。“c:/Users/10834/Desktop/0716_pro…...

探索自动化的魔法:Python中的pyautogui库

文章目录 探索自动化的魔法&#xff1a;Python中的 pyautogui 库背景&#xff1a;为什么选择pyautogui&#xff1f;pyautogui是什么&#xff1f;如何安装pyautogui&#xff1f;五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索自动化的魔法&#xff1a;Python中的 …...

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

一、本文介绍 本文记录的是利用GsConv优化YOLOv9的颈部网络。深度可分离卷积&#xff08;DSC&#xff09;在轻量级模型中被广泛使用&#xff0c;但其在计算过程中会分离输入图像的通道信息&#xff0c;导致特征表示能力明显低于标准卷积&#xff08;SC&#xff09;&#xff0c…...

EasyExcel的基本使用——Java导入Excel数据

使用EasyExcel导入Excel数据有两种方式 无论哪种方式我们都需要建立Excel表格和Java对象的绑定 首先我们需要根据Excel表头定义一个对应的类 excel表示例&#xff1a; 对应的类&#xff1a; 使用ExcelProperty将excel列名和字段名绑定&#xff0c;括号里面填列名 package co…...

Apache Iceberg 试用

启动 spark-sql 因为 iceberg 相关的 jars 已经在 ${SPARK_HOME}/jars 目录&#xff0c;所以不用 --jars 或者 --package 参数。 spark-sql --master local[1] \--conf spark.sql.extensionsorg.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spar…...

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用

一&#xff0c;栈 &#xff08;一&#xff09;栈的特点 栈是一种具有特殊访问方式的存储空间&#xff0c;特殊在于&#xff0c;进出这块存储空间的数据&#xff0c;“先进后出&#xff0c;后进先出” 由于栈的这个“先进后出”的特点&#xff0c;我们可以利用其来很好的操作内…...

【Python机器学习】NLP信息提取——值得提取的信息

目录 提取GPS信息 提取日期 如下一些关键的定量信息值得“手写”正则表达式&#xff1a; GPS位置&#xff1b;日期&#xff1b;价格&#xff1b;数字。 和上述可以通过正则表达式轻松捕获的信息相比&#xff0c;其他一些重要的自然语言信息需要更复杂的模式&#xff1a; 问…...

代理IP批理检测工具,支持socks5,socks4,http和https代理批量检测是否可用

代理IP批理检测工具,支持socks5,socks4,http和https代理批量检测是否可用 工具使用c编写&#xff1a; 支持ipv4及ipv6代理服务器。 支持http https socks4及socks5代理的批量检测。 支持所有windows版本运行&#xff01; 导入方式支持手工选择文件及拖放文件。 导入格式支持三…...

AI视觉算法盒是什么?如何智能化升级网络摄像机,守护全方位安全

在智能化浪潮席卷全球的今天&#xff0c;以其创新技术引领行业变革&#xff0c;推出的集高效、智能、灵活于一体的AI视觉算法盒。这款革命性的产品&#xff0c;旨在通过智能化升级传统网络摄像机&#xff0c;为各行各业提供前所未有的安全监控与智能分析能力&#xff0c;让安全…...

【Vue】VueRouter路由

系列文章目录 第七章 VueRouter路由 文章目录 系列文章目录第一节&#xff1a;VueRouter基础一、安装&#xff1a;二、基本使用&#xff1a;1. 创建路由代码&#xff1a;Single Page Application&#xff1a;SPA2. 使用路由3. 展示路由&#xff1a; 二、嵌套路由三、路由传参1…...

idea多模块启动

文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有&#xff0c;点击一下底部的窗口就会出现 如果不存在&#xff0c;执行下一步 2.查看自己项目的工作空间位置 点击 File&…...

23:SPI二:W25Q64存储器模块的使用

W25Q64存储器模块的使用 1、W25Q64的简介2、模块内部结构2.1&#xff1a;引脚结构2.2&#xff1a;内部存储结构2.3&#xff1a;此模块的注意事项 3、程序模拟SPI读写W25Q644、片上外设SPI读写W25Q64 1、W25Q64的简介 其中最主要的特点就是掉电不丢失。 由上图所示&#xff1a…...

BHVCC AI人工智能大鼠八臂视频迷宫实验步骤 八臂迷宫刺激器

八臂迷宫是一种用于研究动物空间记忆的迷宫模型。它由一个中心区和其周围连接的八条臂组成&#xff0c;在其中一些臂的末端放入食饵或将一些臂施以电击&#xff0c;根据动物的取食或逃避策略&#xff08;进入每个臂的次数、时间、错能&#xff08;如动物活动路径、各种时间、次…...

告别繁琐安装:用快马平台在线环境,三步创建你的第一个网页应用

作为一个刚入门的前端开发者&#xff0c;我最近发现了一个特别适合新手快速上手的开发方式——不用下载任何软件&#xff0c;直接在浏览器里就能完成网页开发的全流程。今天想和大家分享这个超实用的发现&#xff0c;以及我是如何用它快速做出第一个网页应用的。 传统开发环境的…...

前端 SEO 如何优化

前端 SEO 如何优化 在互联网时代&#xff0c;网站的前端 SEO&#xff08;搜索引擎优化&#xff09;已经成为提升网站流量和用户体验的重要手段。作为一名科普作家&#xff0c;我将通过本文深入探讨前端 SEO 如何优化&#xff0c;并提供一些实用建议&#xff0c;帮助你在百度等…...

物联网设备的PCBA定制化需求与解决方案!

‍物联网设备的快速发展对PCBA制造提出了新的挑战与传统消费电子相比&#xff0c;物联网设备通常要求更小的体积、更低的功耗和更强的无线连接能力&#xff0c;这对PCBA的微型化设计和集成度提出了更高要求。在元器件选择上&#xff0c;物联网设备大量采用微型封装和低功耗芯片…...

终极指南:3分钟掌握Silk v3音频转换,彻底解决微信QQ语音播放难题

终极指南&#xff1a;3分钟掌握Silk v3音频转换&#xff0c;彻底解决微信QQ语音播放难题 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch con…...

告别“玩具AI”:联楷国际以商业大模型重塑本地生活,开启一人AI公司时代

在AI浪潮席卷全球的今天&#xff0c;一个尖锐的问题摆在无数中小企业主面前&#xff1a;当ChatGPT们成为茶余饭后的谈资&#xff0c;当各种AI绘画、AI聊天工具令人眼花缭乱时&#xff0c;真正能为我降本增效、解决实际经营痛点的AI在哪里&#xff1f; 喧嚣的“娱乐化AI”噱头之…...

Vue大屏自适应实战指南:v-scale-screen深度解析与完整方案

Vue大屏自适应实战指南&#xff1a;v-scale-screen深度解析与完整方案 【免费下载链接】v-scale-screen Vue large screen adaptive component vue大屏自适应组件 项目地址: https://gitcode.com/gh_mirrors/vs/v-scale-screen 在当今数据驱动的时代&#xff0c;大屏数据…...

信创迁移踩坑记:从CentOS 7换到TencentOS 3.3,你的程序为啥报‘时间倒流’错误?

信创迁移实战&#xff1a;从CentOS 7到TencentOS 3.3的时间同步陷阱与深度修复指南 当企业技术栈从CentOS向国产化操作系统迁移时&#xff0c;时间同步问题往往是最容易被忽视却影响最深远的"暗礁"。最近遇到一个典型案例&#xff1a;某金融客户将核心交易系统从Cent…...

SEO优化有哪些快速有效的方法_自媒体如何通过SEO快速提升曝光度

SEO优化有哪些快速有效的方法 在当前数字化时代&#xff0c;自媒体如何通过SEO快速提升曝光度成为了许多内容创作者和网络营销人员关注的焦点。搜索引擎优化&#xff08;SEO&#xff09;不仅能够提升网站的自然排名&#xff0c;还能有效增加自媒体的曝光度。具体有哪些快速有效…...

ARM Linux 驱动开发篇--- 设备树下的 LED 驱动实验-- Ubuntu20.04

&#x1f3ac; 渡水无言&#xff1a;个人主页渡水无言 ❄专栏传送门&#xff1a; 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门&#xff1a; 《freertos专栏》 《STM32 HAL库专栏》《linux裸机开发专栏》 ❄专栏传送门&#xff1a;《产品测评专栏》…...