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

微信小程序开发自学笔记 —— 八、小程序基础库的更新迭代

小程序基础库的更新迭代

小程序基础库

小程序的运行环境是分成渲染层和逻辑层的,在渲染层可以用各类组件组建界面的元素,在逻辑层可以用各类API来处理各种逻辑,组件、API其实都是小程序基础库进行包装提供的,基础库的职责还要处理数据绑定、组件系统、事件系统、通信系统等一系列框架逻辑,才能让整个小程序有序的运作起来。

小程序的基础库是JavaScript编写的,它可以被注入到渲染层和逻辑层运行。

基础库载入时机

为了让小程序业务代码能够调用wx.navigateTo等API以及组件,就需要在启动小程序后先载入基础库,接着再载入业务代码。

小程序的渲染层和逻辑层是两个线程管理,渲染层WebView层注入的称为WebView基础库,逻辑层注入的称为AppService基础库。

所有小程序在微信客户端打开的时候,都需要注入相同的基础库 。

小程序的基础库会被提前内置在微信客户端。这样做的好处有两点:

  1. 降低业务小程序的代码包大小。
  2. 可以单独修复基础库中的Bug,无需修改到业务小程序的代码包
基础库的版本号

小程序基础库版本号使用 semver 规范,格式为 Major.Minor.Patch,其中Major、Minor、Patch均为整数。

在小程序中,可以通过wx.getSystemInfo()或者wx.getSystemInfoSync()方法获取小程序版本号

let info = wx.getSystemInfoSync()
console.log("小程序基础库版本号为:" + info.SDKVersion)

异常

JS运行异常

一般语法错误以及运行时错误,浏览器都会在Console里边显示对应的错误信息,以及出错的文件、行号、堆栈信息。

捕捉JS异常的方法

在WebView层有两种方法可以捕捉JS异常:

  1. try, catch方案。你可以针对某个代码块使用try,catch包装,这个代码块运行时出错时能在catch块里边捕捉到。
  2. window.onerror方案。也可以通过window.addEventListener(“error”, function(evt){}),这个方法能捕捉到语法错误跟运行时错误,同时还能知道出错的信息,以及出错的文件,行号,列号。

小程序基础库在WebView侧使用window.onerror方案进行捕捉异常,在逻辑层AppService侧通过把App实例和Page实例的各个生命周期等方法包裹在try-catch里进行捕捉异常。同时在App构造器里提供了onError的回调,当业务代码运行产生异常时,这个回调被触发,同时能够拿到异常的具体信息,开发者自己根据业务情况处理对应的容错逻辑。

基础库的更新

基础库版本变动

小程序的很多能力需要微信客户端来支撑,例如蓝牙、直播能力、微信运动等,可以说,小程序基础库的迭代离不开微信客户端的发布。

推送基础库过程

小程序基础库的迭代速度非常快,但是基础库的变更会影响到所有小程序的运行,如果基础库出现重大Bug没有及时发现时,会引起很多小程序无法正常使用,所以在更新基础库时要谨慎。

首先,在正式灰度推送新版本基础库前,内部要有严格的自动化测试流程,保证已有的测试用例全部能通过,同时还会在带有最新版本库的测试机上运行访问量较高的一些小程序并检测他们是否存在一些白屏等异常现象。

接着进行灰度推送,一般灰度时长是12个小时,遇到一些重大代码改动时可能灰度时间会更久。推送过程中,观察监控曲线是否有异动,仔细分析对应的上报日志是否存在致命的错误。

灰度推送完成后,发布新能力的文档,此时也要关注微信开发者社区的Bug反馈,根据情况再决定是否要推送Patch版本进行一些Bug的修复。

相关文章:

微信小程序开发自学笔记 —— 八、小程序基础库的更新迭代

小程序基础库的更新迭代 小程序基础库 小程序的运行环境是分成渲染层和逻辑层的,在渲染层可以用各类组件组建界面的元素,在逻辑层可以用各类API来处理各种逻辑,组件、API其实都是小程序基础库进行包装提供的,基础库的职责还要处…...

Mysql迁移Postgresql

目录原理环境准备操作系统(Centos7)Mysql客户端安装Psql客户端安装数据库用户空字符串处理成null导表脚本dbmysql2pgmysqlcopy测试在mysql中建表导表测试查看pg中的表原理 Mysql抽取:mysql命令重定向到操作系统文件,处理成csv文件; PG装载&a…...

关于信息安全认证CISP、PTE对比分析

CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师(以下简称PTE) 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心,政府背景给认证做背书,学员信息都在中国政府可控的机构手中; 如果想在政府、国…...

游戏场景编辑器和骨骼动画相关软件

游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图,还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性,同时尽量保持直观性。 Tiled Map 不但…...

vue3常用的API

目录 1.ref函数 2.reactive函数 3.reactive对比ref 4.computed函数 5.watch函数 6.toRef 7..provide && inject 1.ref函数 作用: 定义一个响应式的数据 语法: const xxx ref(initValue) 创建一个包含响应式数据的引用对象(reference对象&#xff…...

Qt中使用

LIB库路径,include 头文件,运行的时候记得吧dll库带上,这基本就完成了。准备工作:Qt可以是傻瓜式的安装就行,GE的驱动里面有exe,直接点击安装即可,完了记得到安装路径把“.h”“.liib”和“.dll…...

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对…...

FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简…...

Django 之 CharField 和 TextField

CharField test_char models.CharField(max_length288)设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行&…...

recyclerview 使用的坑

1.有不同的布局 12_GridLayoutManager setSpanSizeLookup()方法 - 简书 setSpanSizeLookup 这个方法要会 spanCount和 getSpanSize spanCount/getSpanSize() 才是这一项所占的宽度 2.均分 item布局要设置宽度为match_paraent 3.设置完了。发现高度不一样,…...

DBeaver连接mysql、oracle数据库

1. DBeaver连接mysql 1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接 3)选择mysql驱动程序 4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息 6)选择本地…...

Kivy GridLayout 布局

Kivy GridLayout 是一种用于构建用户界面的布局类型,可以帮助我们快速创建具有固定列和行的网格布局。GridLayout 布局是可以适用于任意数量的行和列的布局,然后在这些行和列中放置 UI 元素。 Kivy 的 GridLayout 使用起来类似于 HTML 的表格&#xff0c…...

Spark高手之路2—Spark安装配置

文章目录Spark 运行环境一、Local 模式1. 下载压缩包2.上传到服务器3. 解压4. 启动 Local 环境5. 命令行工具6. 退出本地模式7. 提交应用二、Standalone 模式1. 解压2. 修改配置文件1)进入解压缩后路径的 conf 目录,复制 workers.template 文件为 worker…...

Java中对象的比较

目录元素的比较基本类型的比较引用类型的比较1. 覆写基类的equals2. 基于Comparble接口类的比较3. 基于比较器比较三种方法对比元素的比较 基本类型的比较 这里就拿整型, 字符型, 布尔型 为例: public static void main(String[] args) {int a 10;int b 20;System.out.pri…...

Python编程训练题2

1.11 有 n 盏灯&#xff0c;编号 1&#xff5e;n&#xff08;0<n<100&#xff09;。第 1 个人把所有灯打开&#xff0c;第 2 个人按下所有编号为 2 的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第 3 个人按下所有编号为 3 的倍数的开关&#xff08;其…...

Shifu基础功能:设备管理

设备管理 deviceshifu_configmap.yaml中的telemetries表示自动测量记录传导。Shifu通过telemetries中设置的方法&#xff0c;以指定时间向设备周期性地发送请求&#xff0c;来判断设备的连接情况。如果设备出现故障或者连接出现问题&#xff0c;edgeDevice的状态将发生改变&am…...

交互:可以执行命令行的框架才是好框架

上一节课&#xff0c;我们开始把框架向工业级迭代&#xff0c;重新规划了目录&#xff0c;这一节课将对框架做更大的改动&#xff0c;让框架支持命令行工具。 第三方命令行工具库 cobra obra 不仅仅能让我们快速构建一个命令行&#xff0c;它更大的优势是能更快地组织起有许多…...

eunomia-bpf 和 wasm-bpf 项目的 3 月进展

eunomia-bpf 项目是一个开源项目&#xff0c;旨在提供一组工具&#xff0c;用于在 Linux 内核中更方便地编写和运行 eBPF 程序。在过去一个月中&#xff0c;该项目取得了一些新的进展&#xff0c;以下是这些进展的概述。 首先&#xff0c;eunomia-bpf 动态加载库进行了一些重要…...

Spring框架核心功能手写实现

文章目录概要Spring启动以及扫描流程实现基础环境搭建扫描逻辑实现bean创建的简单实现依赖注入实现BeanNameAware回调实现初始化机制模拟实现BeanPostProcessor模拟实现AOP模拟实现概要 手写Spring启动以及扫描流程手写getBean流程手写Bean生命周期流程手写依赖注入流程手写Be…...

k8s-镜像构建Flink集群Native session

一.Flink安装包下载 wget https://dlcdn.apache.org/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.12.tgz 二.构建基础镜像推送私服 docker pull apache/flink:1.14.6-scala_2.12 docker tag apache/flink:1.14.6-scala_2.12 172.25.152.2:30002/dmp/flink:...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...