tencent cloud

文档反馈

小程序运行环境与机制

最后更新时间:2024-04-10 16:12:17

    运行环境

    小程序的运行环境

    TCMPP 小程序可在多种平台上运行:iOS/iPadOS 微信客户端、Android 微信客户端、Mac 微信客户端和用于调试的微信开发者工具等。
    不同运行环境下,脚本执行环境和用于组件渲染的环境是不同的,性能表现也存在差异:
    在 iOS、iPadOS 和 Mac OS 上,小程序逻辑层的 JavaScript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS 14、iPad OS 14、Mac OS 11.4 等。
    在 Android 上,小程序逻辑层的 JavaScript 代码运行在 V8 中,视图层是由基于 Mobile Chromium 内核的微信自研 XWeb 引擎来渲染的。
    在开发工具上,小程序逻辑层的 JavaScript 代码是运行在 NW.js 中,视图层是由 Chromium Webview 来渲染的。JavaScriptCore 无法开启 JIT 编译 (Just-In-Time Compiler),同等条件下的运行性能要明显低于其他平台。

    平台差异

    各运行环境区别如下:
    JavaScript 语法和 API 支持不一致:语法上开发者可以通过开启 ES6 转 ES5 的功能来规避;此外,小程序基础库内置了必要的 Polyfill,来弥补 API 的差异。
    WXSS 渲染表现不一致:尽管可以通过开启来规避大部分的问题,还是建议开发者需要在各端分别检查小程序的真实表现。
    开发者工具仅供调试使用,最终的表现以客户端为准。

    运行机制

    小程生命周期

    小程序从启动到最终被销毁,会经历多种状态,不同状态下表现不同。
    
    
    

    小程序启动

    从用户的角度来看,小程序的启动可以分为两种情况:冷启动和热启动。
    冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
    热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。
    从小程序生命周期的角度来看,一般将冷启动称为启动,而将热启动称为后台切前台

    前台与后台

    小程序启动后,界面被展示给用户,此时小程序处于前台状态。
    当用户关闭小程序时,小程序并没有真正被关闭,而是进入了后台状态,此时小程序还可以短暂运行一小段时间,但部分 API 的使用会受到限制。切后台的方式包括但不限于以下几种:
    单击右上角胶囊按钮离开小程序;
    iOS 系统从屏幕左侧右滑离开小程序;
    Android 系统单击返回键离开小程序;
    小程序前台运行时,通过手势或 Home 键直接把微信切至后台;
    小程序前台运行时直接锁屏;
    当用户再次进入微信并打开小程序,小程序又会重新进入前台状态。

    小程序销毁

    如果用户很久没有使用小程序,或者系统资源紧张,小程序会被销毁,即完全终止运行。具体包括以下几种情形:
    当小程序进入后台并被挂起后,如果很长时间(目前是 30 分钟)都未再次进入前台,小程序会被销毁。
    当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
    在 iOS 系统上,当微信客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁小程序,并提示用户运行内存不足,请重新打开该小程序
    具体策略会持续进行调整优化。

    调试

    开发者可以通过以下工具来调试小程序:
    vConsole:vConsole 可以在手机上查看 console API 输出的日志以及额外的调试信息。使用它可以更轻松地找到并解决问题。
    Source Map:Source Map 可以还原 JS 错误堆栈,通过它可以追踪到代码哪里出错,从而更加快速地调试代码。
    日志:利用小程序自带的日志功能,可以快捷地排查漏洞并定位问题。日志记录了一些重要的操作流程以及错误日志信息,开发者可以通过分析这些日志信息定位并解决问题。
    以上提到的工具都是开发小程序时必备的辅助工具,它们可以方便开发者更加快速地调试小程序代码,提高开发效率。

    问题总结

    小程序内 webview 使用

    当小程序页面,直接使用 webview 加载 H5 页面时,如果页面中有错误或页面中资源有 HTTP 请求,如下:
    
    
    
    加载过程中可能会出现如下错误页面 :
    
    
    
    解决办法:
    将 http 资源替换为 https 资源。

    QQ 分享错误

    Caused by: java.lang.ClassNotFoundException: Didn't find class
    "org.apache.http.conn.scheme.SchemeRegistry"
    QQ 分享错误时如果出现上面的错误,请添加如下配置:
    <application
    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
    </application>
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持