• 开发教程与代码示例
  • 入门
  • 小程序框架
  • 小程序运行时
  • 自定义组件
  • 基础教程
  • 能力教程
  • 性能优化
  • 安全
  • 小程序运行时

    收藏
    我的收藏

    运行环境

    抖音小程序运行在小程序 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