Skip to content

可用性

調試

vConsole

在真機上,如果想要查看console API輸出的日誌內容和額外的調試資訊,按一下荧幕右上角的按鈕打開的選單裏選擇打開調試,此時小程序會退出,重新打開後會右下角會出現一個vConsole按鈕,按一下vConsole按鈕可以打開日誌面板。

小程序的vConsole展示內容如下:

vConsole 說明

由於實現機制的限制,開發者調用console API列印的日誌內容,是轉換成JSON字串後傳輸給vConsole的,導致vConsole中展示的內容會有一些限制:

  • 除了Number、String、Boolean、null外,其他類型都會被作為Object處理展示,列印對象及原型鏈中的Enumerable内容。
  • Infinity和NaN會顯示為null。
  • undefined、ArrayBuffer、Function類型無法顯示。
  • 無法列印存在迴圈引用的對象。
js
const a = {};
a.b = a;
console.log(a);

針對上述問題,小程序在使用vConsole時做了一些處理:

js
const circular = { x: {}, c: {} };
circular.x = [{ promise: Promise.resolve() }];
circular.a = circular;
circular.c.x0 = circular.x[0];

console.log(circular);
// "{a: '<Circular: @>', c: {x0: '<Circular: @.x[0]>'}, x: [{promise: '<Promise>'}]}"

TIP

儘量避免在非調試情景下列印結構過於複雜或內容過長的日誌內容,可能會帶來額外耗時。

運行環境

小程序運行環境

小程序運行在三端:iOS(iPhone/iPad)、Android和用於調試的開發者工具。

三端的腳本執行環境以及用於渲染非原生組件的環境是各不相同:

  • 在iOS上,小程序邏輯層的javascript代碼運行在JavaScriptCore中,視圖層是由WKWebView來渲染的,環境有iOS8、 iOS9、iOS10。
  • 在Android上,小程序邏輯層的javascript代碼運行中X5 JSCore中,視圖層基於Mobile Chrome 97內核實現了。 同層渲染 的功能。
  • 在開發工具上,小程序邏輯層的javascript代碼是運行在 NW.js 中,視圖層是由Chromium 60 Webview來渲染的。

運行限制

基於安全考慮,小程序中不支持動態執行JS代碼,即:

  • 不支持使用eval執行JS代碼。

  • 不支持使用new Function創建函數。

平臺差异

儘管三端的環境是十分相似的,但是還是有些許區別:

 - JavaScript語法和API支持不一致:語法上開發者可以通過開啟ES6轉ES5的功能來規避; 此外,小程序基礎庫內寘了必要的Polyfill,來彌補API的差异。

 - WXSS渲染表現不一致:儘管可以通過開啟樣式補全來規避大部分的問題,還是建議開發者需要在iOS和Android上分別檢查小程序的真實表現。

TIP

開發者工具僅供調試使用,最終的表現以用戶端為准。

用戶端ES6 API支持情况

TIP

以下表格中√為支持,×為該項不支持。

StringiOS 8iOS9iOS10Android
codePointAt
normalize××
includes
startsWith
endsWith
repeat
String.fromCodePoint
ArrayiOS 8iOS9iOS10Android
copyWithin
find
findIndex
fill
entries
keys
valuesXX
includesX
Array.from
Array.of
NumberiOS 8iOS9iOS10Android
isFinite
isNaN
parseInt
parseFloat
isInteger
EPSILON
isSafeInteger
MathiOS 8iOS9iOS10Android
trunc
sign
cbrt
clz32
imul
fround
hypot
expm1
log1p
log10
log2
sinh
cosh
tanh
asinh
acosh
atanh
ObjectiOS 8iOS9iOS10Android
is
getOwnPropertyDescriptor
keys
getOwnPropertyNames
getOwnPropertySymbols
OtheriOS 8iOS9iOS10Android
Symbol
Set
Map
Proxy××X
Reflect
Promise

運行機制

小程序啟動會有兩種情况,一種是冷開機,一種是暖開機,假如用戶已經打開過某小程序,然後在一定時間內再次打開該小程序,此時無需重新啟動,只需將後臺態的小程序切換到前臺,這個過程就是暖開機; 冷開機指的是用戶首次打開或小程序被宿主App主動銷毀後再次打開的情况,此時小程序需要重新加載啟動。

更新機制

小程序冷開機時如果發現有新版本,將會非同步下載新版本的代碼包,並同時用用戶端本地的包進行啟動,即新版本的小程序需要等下一次冷開機才會應用上。 如果需要馬上應用最新版本,可以使用 wx.getUpdateManager API進行處理。

運行機制

  • 小程序沒有重啓的概念。

  • 當小程序進入後臺,用戶端會維持一段時間的運行狀態,超過一定時間後(現時是5分鐘)會被容器主動銷毀。

  • 在iOS上,當用戶端在一定時間間隔內(現時是5秒)連續收到兩次及以上系統記憶體告警時,會主動進行小程序的銷毀,並提示用戶。