抖音开放平台Logo
开发者文档
“/”唤起搜索
控制台
  • 开发教程与代码示例
  • 入门
  • 小程序框架
  • 小程序运行时
  • 自定义组件
  • 基础教程
  • 能力教程
  • 性能优化
  • 安全
  • 小程序运行时

    收藏
    我的收藏

    运行环境

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