小程序运行时

更新时间 2024-07-24 02:58:49
收藏
我的收藏

运行环境​

抖音小程序运行在小程序 SDK 上,但是由于 SDK 嵌入的宿主不同,小程序 SDK 提供的能力集合可能会根据宿主的不同而变化。​
    在 iOS 中,小程序的逻辑层 JavaScript 代码运行在 JavaScriptCore 中,视图层由 WKWebView 进行渲染。
    在 Android 中,小程序的逻辑层 JavaScript 代码运行在 V8 中,视图层由 Mobile Chrome 进行渲染。
由于小程序在不同的操作系统/宿主下,能力与样式的支持并不完全相同,所以在开发者工具中完成开发之后,需要在不同环境下对自己的小程序进行验证,验证无问题后再上传。​

运行机制​

启动​

小程序启动会有两种方式,冷启动和热启动。​
    冷启动:用户首次打开小程序,或小程序被主动销毁(后台运行超过 5 分钟)后再次打开时,小程序需要重新加载启动,即冷启动。
    热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。
小程序没有重启的概念,所谓的重启即先主动销毁后再冷启动。小程序冷启动时会完整的触发小程序的生命周期函数。热启动时仅部分生命周期函数被触发。​

前台状态和后台状态​

首次打开小程序时候,小程序会处于前台运行状态。​
点击右上角关闭按钮关闭小程序或者离开宿主客户端时,小程序并不会直接销毁,而是进入后台运行状态。小程序在后台停留超过 5 分钟会被主动销毁。​
当未被系统销毁的小程序再度被打开或者激活时,会从后台运行切换为前台运行。​

更新​

小程序每次冷启动时,都会优先使用本地已经缓存的程序包启动小程序,同时异步检查是否有更新版本。​
如果发现有新版本,将会异步下载新版本的代码包。因此新的代码包默认是在下一次冷启动时才会应用。如果需要在发布后马上应用最新版本,可以使用 getUpdateManager。​

销毁​

用户点击右上角的关闭按钮关闭小程序后,小程序仅是进入后台状态,并未被销毁。只有当小程序在后台状态下满足以下条件时,才会被销毁。​
    当小程序进入后台,可以维持一段时间(5 分钟)的后台运行状态,如果这段时间内都未再进入前台,小程序会被销毁。
    当小程序占用系统资源过高,可能会被系统销毁或被客户端(头条、抖音或其它宿主)主动回收。
在 iOS 上,当客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁小程序,并提示用户 「运行内存不足,请重新打开该小程序」。 建议小程序在必要时使用 tt.onMemoryWarning 监听内存告警事件,进行必要的内存清理。​

JavaScript 支持情况​

运行限制​

基于安全考虑,小程序中不支持动态执行代码:​
    不支持 eval
    不支持 new Function() 创建函数。
小程序中禁止访问全局对象:​
    禁止访问globalThis
    禁止访问window

ES6 支持情况一览表​

抖音小程序很大程度上是支持 ES6 的,但是有少部分特性无法支持,目前的情况如下:​

String​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
codePointAt
✅​
✅​
✅​
normalize
❌​
✅​
✅​
includes
✅​
✅​
✅​
startsWith
✅​
✅​
✅​
endsWith
✅​
✅​
✅​
repeat
✅​
✅​
✅​
String.fromCodePoint
✅​
✅​
✅​

Array​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
copyWithin
✅​
✅​
✅​
find
✅​
✅​
✅​
findIndex
✅​
✅​
✅​
fill
✅​
✅​
✅​
entries
✅​
✅​
✅​
keys
✅​
✅​
✅​
values
✅​
✅​
✅​
includes
✅​
✅​
✅​
Array.from
✅​
✅​
✅​
Array.of
✅​
✅​
✅​

Number​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
isFinite
✅​
✅​
✅​
isNaN
✅​
✅​
✅​
parseInt
✅​
✅​
✅​
parseFloat
✅​
✅​
✅​
Number.isInteger
✅​
✅​
✅​
Number.EPSILON
✅​
✅​
✅​
Number.isSafeInteger
✅​
✅​
✅​

Math​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
trunc
✅​
✅​
✅​
sign
✅​
✅​
✅​
cbrt
✅​
✅​
✅​
clz32
✅​
✅​
✅​
imul
✅​
✅​
✅​
fround
✅​
✅​
✅​
hypot
✅​
✅​
✅​
expm1
✅​
✅​
✅​
log1p
✅​
✅​
✅​
log10
✅​
✅​
✅​
log2
✅​
✅​
✅​
sinh
✅​
✅​
✅​
cosh
✅​
✅​
✅​
tanh
✅​
✅​
✅​
asinh
✅​
✅​
✅​
acosh
✅​
✅​
✅​
atanh
✅​
✅​
✅​

Object​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
is
✅​
✅​
✅​
assign
✅​
✅​
✅​
getOwnPropertyDescriptor
✅​
✅​
✅​
keys
✅​
✅​
✅​
getOwnPropertyNames
✅​
✅​
✅​
getOwnPropertySymbols
✅​
✅​
✅​

Other​

名称​
iOS 9​
iOS 10 及以上版本​
Android​
Symbol
✅​
✅​
✅​
Set
✅​
✅​
✅​
Map
✅​
✅​
✅​
Proxy
❌​
✅​
✅​
Reflect
✅​
✅​
✅​
Promise
✅​
✅​
✅​
async/await
✅​
✅​
✅​