小程序的底层基础库迭代速度是非常快的
组件、API其实都是小程序基础库进行包装提供的,基础库的职责还要处理数据绑定、组件系统、事件系统、通信系统等一系列框架逻辑
小程序的基础库是JavaScript编写的,它可以被注入到渲染层和逻辑层运行
为了让小程序业务代码能够调用wx.navigateTo等API以及组件,就需要在启动小程序后先载入基础库
,接着再载入业务代码
渲染层WebView层注入的称为WebView基础库
,逻辑层注入的称为AppService基础库
小程序的基础库不会被打包在某个小程序的代码包里边,它会被提前内置在微信客户端
小程序基础库版本号使用 semver规范
,格式为 Major.Minor.Patch
可以通过wx.getSystemInfo()
或者wx.getSystemInfoSync()
方法获取小程序版本号
console.log(wx.getSystemInfoSync().SDKVersion)
在比较版本号时,不要偷懒,要拆分后按照大小逐个比较
在WebView层有两种方法可以捕捉JS异常
try
, catch
方案,你可以针对某个代码块使用try,catch包装,这个代码块运行时出错时能在catch块里边捕捉到window.onerror
方案,也可以通过window.addEventListener("error", function(evt){})
,这个方法能捕捉到语法错误跟运行时错误逻辑层不存在window对象,因此逻辑层AppService侧无法通过window.onerror来捕捉异常
在逻辑层AppService侧通过把App实例和Page实例的各个生命周期等方法包裹在try-catch里进行捕捉异常
同时在App构造器里提供了onError的回调,当业务代码运行产生异常时,这个回调被触发
小程序的很多能力需要微信客户端来支撑,例如蓝牙、直播能力、微信运动等,可以说,小程序基础库的迭代离不开微信客户端的发布
为了避免新版本的基础库给线上小程序带来未知的影响,微信客户端都是携带上一个稳定版的基础库发布的
等到微信客户端正式发布后,我们会开始灰度推送1.7.0版本的基础库到6.5.11的微信客户端里
如果存在重大Bug,那此次推送会被回退,也就是基础库版本回到1.6.0版本
在正式灰度推送新版本基础库前,我们内部有严格的自动化测试流程,保证已有的测试用例全部能通过
接着进行灰度推送,一般灰度时长是12个小时,遇到一些重大代码改动时可能灰度时间会更久
灰度推送完成后,我们会发布新能力的文档,此时我们也会关注微信开发者社区的Bug反馈,根据情况再决定是否要推送Patch版本进行一些Bug的修复