小程序运行机制

小程序如何运行

  • 打开小程序前会做什么
  • 打开小程序的时候会发生什么
  • 启动过程是怎样
  • 小程序如何更新

小程序的运行环境

运行环境 逻辑层 渲染层
iOS JavaScriptCore WKWeView
Mac JavaScriptCore WKWeView
Android V8 自研XWeb引擎基于Mobile Chrome内核
PC Chrome内核 Chrome内核
IDE NW.js Chrome Webview

小程序的基础库

由JavaScript编写,可以被注入到渲染层和逻辑层运行,总的来说负责处理数据绑定组件系统事件系统通信系统等一系列框架逻辑

  • 渲染层:可以用各类组件组建界面的元素
  • 逻辑层:可以用各类API来处理各种逻辑

基础库组成

  • 提供VD渲染机制相关基础代码(EXparser框架)
  • 提供封装后的内置组件
  • 提供逻辑层的API
  • 提供其他补充能力(自定义组件和插件等)的基础代码

小程序的启动过程

在小程序启动时,微信为小程序展示一个固定启动页面,界面内包含小程序的图标、名称和加载提示图标
在这里插入图片描述

代码的加载

在小程序启动前,微信(客户端)会提前准备好一个页面层级(页面预渲染)用于展示小程序的首页,包括逻辑层和渲染层分别的初始化以及公共库的注入

  • 页面预渲染:初始化JSCore注入AppService基础库,初始化WebView注入WebView基础库
  • 小程序启动:创建基础UI并下载业务代码,渲染层逻辑层注入业务代码后启动

在这里插入图片描述

在打开小程序前,微信已经提前准备好一个WebView层,而当这个预备的WebView层被使用之后,一个新的WebView层也会被提前准备好,这样可以提升用户体验
类比web应用,提前把资源下载,准备好请求、数据,跳转页面时直接进行渲染

冷启动和热启动

只有当小程序进入后台一定时间,或者系统资源占用过高,才会被销毁

  • 冷启动:用户首次打开、或小程序销毁后再次打开,重新加载启动
  • 热启动:已经打开过的小程序,未被销毁,一段时间内再次打开,只是从后台状态进入前台状态

小程序的更新机制

基础库更新

小程序的基础库不会被打包在某个小程序代码中,而是提前内置在微信客户端。一般来说,当微信客户端发布稳定后,小程序会针对新版本的客户端来灰度新版本的基础库。在后台可以配置小程序基础库版本

开发代码更新

  • 未启动时更新:
    • 本地有小程序的历史版本:可能打开旧版本
    • 客户端检查本地缓存:有新版本会静默更新
    • 发布后24h内:下发新版本到用户
  • 启动时更新:
    • 每次冷启动:检查是否有更新版本
    • 有新版本:异步下载新版本,同时启动本地包
    • 新版本需要等下一次冷启动才会应用上
    • 热启动不会触发更新,如果需要马上更新并应用,可以使用wx.getUpdateManager API进行处理

相关推荐

  1. uniapp 程序运行报错plus...

    2024-07-20 13:14:01       23 阅读
  2. 微信程序更新机制

    2024-07-20 13:14:01       52 阅读
  3. 程序归类及适合企业运用

    2024-07-20 13:14:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 13:14:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 13:14:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 13:14:01       45 阅读
  4. Python语言-面向对象

    2024-07-20 13:14:01       55 阅读

热门阅读

  1. 定个小目标之刷LeetCode热题(45)

    2024-07-20 13:14:01       20 阅读
  2. 人工势场法路径规划算法

    2024-07-20 13:14:01       13 阅读
  3. Android笔试面试题AI答之Activity(2)

    2024-07-20 13:14:01       17 阅读
  4. HIVE:使用get_json_object解析json对象

    2024-07-20 13:14:01       18 阅读
  5. Elasticsearch索引管理和生命周期管理

    2024-07-20 13:14:01       18 阅读
  6. 现代生活背景下陶瓷艺术设计的延伸与发展

    2024-07-20 13:14:01       19 阅读
  7. LeetCode 2956.找到两个数组中的公共元素:哈希表

    2024-07-20 13:14:01       18 阅读
  8. 麦芒30全新绽放,中国电信勾勒出AI手机的新方向

    2024-07-20 13:14:01       20 阅读
  9. Prometheus 运维中实际的故障案例以及解决办法

    2024-07-20 13:14:01       15 阅读
  10. Gmsh应用程序编程接口

    2024-07-20 13:14:01       12 阅读
  11. 【Go系列】RPC和grpc

    2024-07-20 13:14:01       16 阅读
  12. Spark SQL----INSERT OVERWRITE DIRECTORY

    2024-07-20 13:14:01       21 阅读