(1)動作環境:動作環境アプレット
小型のマイクロチャネルは、三端子で動作します:iOS版(iPhone / iPadアプリ)、Androidと開発ツールをデバッグのために。
スリーサイドスクリプトの実行環境、およびレンダリングのための非ネイティブ環境では、同じアセンブリではありません。
-
iOSの、JavaScriptコード実行中のアプレットJavaScriptCoreにおけるロジック層では、層がWKWebView、環境iOS8、iOS9、iOS10をレンダリングするためにビューで構成されます。
-
Android上で、
-
アプレットのJavaScriptコードは、論理層で実行されているツールの開発では、 NW.js 、層は、クロム60のWebViewをレンダリングするビューで構成されています。
プラットフォームの違い
三端子の環境は非常に似ていますが、まだ少しの違いではあるが。
-
JavaScript
APIのサポート文法や矛盾:文法開発者が変えることができますES6
転送ES5
(関数回避するために詳細を);また、アプレットライブラリは、APIの違い(補償するために、基盤必要ポリフィルを建て詳細)。 -
WXSS
https://developers.weixin.qq.com/miniprogram/dev/devtools/codecompile.html#パターン完了)、開発者は、それぞれ、iOSとAndroidの上でアプレットの真の性能をチェックする必要があることをお勧めします。
唯一、デバッグのための開発者ツール、クライアントの最終的な性能が優先します。
(2)JavaScriptサポートケース
営業の制限
安全上の理由から、アプレット、すなわち、動的実行JSコードをサポートしていません。
- サポートされていない
eval
コードJSの実装を - サポートしていません
new Function
作成機能を
ES6 APIのためのクライアントサポート
小さなマイクロチャネル・プログラムはES6のAPIの最もによって支持されている次のように、それは(いくつかのAPIに依存するシステムのバージョン)APIによってサポートされています。
弦 | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
codePointAt | ||||
ノーマライズ | ✘ | ✘ | ||
含ま | ||||
startsWith | ||||
endsWith | ||||
繰り返す | ||||
String.fromCodePoint |
アレイ | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
copyWithin | ||||
見つけます | ||||
findIndex | ||||
埋めます | ||||
エントリー | ||||
キー | ||||
値 | ✘ | ✘ | ||
含ま | ✘ | |||
Array.from | ||||
Array.of |
数 | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
isFiniteの方 | ||||
ますisNaN | ||||
parseInt | ||||
parseFloatは | ||||
isInteger | ||||
EPSILON | ||||
isSafeInteger |
数学 | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
TRUNC | ||||
符号 | ||||
CBRT | ||||
clz32 | ||||
寄付 | ||||
fround | ||||
関数hypot | ||||
expm1 | ||||
log1p | ||||
log10の | ||||
LOG2 | ||||
生れつき | ||||
COSH | ||||
魚 | ||||
ASINH | ||||
ACOSH | ||||
Atnh |
オブジェクト | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
あります | ||||
割り当てます | ||||
getOwnPropertyDescriptor | ||||
キー | ||||
getOwnPropertyNames | ||||
getOwnPropertySymbols |
他の | iOS8 | iOS9 | iOS10 | アンドロイド |
---|---|---|---|---|
シンボル | ||||
セット | ||||
地図 | ||||
代理 | ✘ | ✘ | ✘ | |
リフレクト | ||||
約束する |
(3)アプレットの操作機構
アプレットが起動します
アプレットは、1つの「コールドスタート」、一方があり、2例があるだろう開始し、「ホットスタート。」
- ホットスタート:ユーザーがアプレットを開いている場合は、アプレットは、単に前面に状態アプレットの背景を切り替え、再起動せずに、一定の時間内に再びこの時間を開いて、このプロセスはホットスタートです。
- コールドスタート:ユーザーが最初に開いたり、アプレットが積極的にマイクロチャネルが再び開いた破壊された後の状況、アプレットをリロードするには、この時間が開始され、すなわち、コールドスタート。
概念を再起動せずにアプレット。
前景/背景ステータス
当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有直接销毁,而是进入了后台状态;
当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。
小程序销毁
需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
- 当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁。
- 当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
- 在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次及以上系统内存告警时,会主动进行小程序的销毁,并提示用户 「该小程序可能导致微信响应变慢被终止」。
- 建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
基础库 1.1.0 及以上,1.4.0 以下版本: 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。
再次打开逻辑
基础库 1.4.0 开始支持,低版本需做兼容处理。
用户打开小程序的预期有以下两类场景:
A. 打开首页: 场景值有以下几项:
场景值ID | 说明 |
---|---|
1001 | 发现栏小程序主入口,「最近使用」列表 |
1019 | 微信钱包 |
1022 | 聊天顶部置顶小程序入口 |
1023 | 安卓系统桌面图标 |
1038 | 从另一个小程序返回 |
1056 | 音乐播放器菜单 |
B. 打开小程序指定的某个页面: 场景值为除 A 以外的其他
当再次打开一个小程序逻辑如下:
上一次的场景 | 当前打开的场景 | 效果 |
---|---|---|
A | A | 保留原来的状态 |
B | A | 清空原来的页面栈,打开首页(相当于执行 wx.reLaunch 到首页) |
A 或 B | B | 清空原来的页面栈,打开指定页面(相当于执行 wx.reLaunch 到指定页) |
(4)小程序更新机制
未启动时更新
开发者在管理后台发布新版本的小程序之后,如果某个用户本地有小程序的历史版本,此时打开的可能还是旧版本。微信客户端会有若干个时机去检查本地缓存的小程序有没有更新版本,如果有则会静默更新到新版本。总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内下发新版本信息到用户。用户下次打开时会先更新最新版本再打开。
启动时更新
小程序每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。
如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理。
const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log(res.hasUpdate) }) updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success(res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { // 新版本下载失败 })
.