智慧小程式檔案館——遠端除錯

百度智慧小程式學院發表於2018-09-30

在即將為祖國麻麻慶生的日子裡,小編帶著開心愉悅興奮期待的心情,為大家帶來本週的更文,講一講智慧小程式遠端除錯的小祕密哦~

真機除錯是小程式的重要除錯方法,可以幫助開發者在真機上除錯程式碼,快速查詢和定位真機中的 bug 。百度小程式的真機除錯有以下幾種方案:sConsole、安卓真機除錯和遠端除錯

  • sConsole: 內建在客戶端中,可以檢視小程式的輸出資訊、頁面的文件樹等內容,但是 sConsole 無法設定執行斷點,不能單步除錯小程式。
  • 安卓真機除錯:開發者安裝特定版本的安卓客戶端,通過資料線連線電腦,進行真機除錯。具體步驟參考真機除錯。但是,受機型限制,IOS 百度 App 客戶端並不支援這種插線除錯。
  • 遠端除錯:遠端除錯的視窗和客戶端通過網路傳輸資訊,支援斷點除錯、檢視頁面文件樹、監聽網路請求等操作,可以幫助小程式開發者快速除錯和查詢小程式在客戶端中的問題,是真機除錯中最簡單便捷的方案。

除錯方法

通過點選百度小程式開發者工具上的遠端除錯按鈕,掃碼開啟遠端除錯。當使用者程式碼變更後,點選遠端除錯的重新整理按鈕,重新整理客戶端中的小程式即可,您無需重新掃碼哦。

圖片

基本原理

遠端除錯啟動後,開發者工具啟動兩個服務,靜態檔案代理socket訊息的轉發

  • 靜態檔案代理主要是服務於開發者的小程式程式碼、master html頁面和slave html頁面,為客戶端提供靜態資源。
  • 小程式頁面和遠端除錯視窗之間建立socket連線,實現客戶端和除錯視窗的雙工通訊。
    圖片
    以下從遠端除錯視窗調起原理、master頁面的通訊原理、slave頁面檢視同步三個部分進一步闡述整體設計。

視窗調起原理

除錯視窗調起是遠端除錯中的第一步,也是遠端除錯視窗和客戶端資訊交換的第一步。IDE生成遠端除錯二維碼,客戶端掃碼並解析引數,下載小程式開發程式碼,同時開發者工具開啟遠端除錯視窗。客戶端下載完成後,解壓開啟小程式,請求靜態檔案server代理的master html和slave html頁面,完成小程式的調起。

圖片

master通訊原理

master socket 之間的通訊關係是遠端除錯整體架構中最重要的部分。開發者掃碼後,開啟遠端除錯視窗,客戶端中master socket和遠端除錯視窗中的master socket通過socket server轉發完成資訊互動。

  • 首先,客戶端向遠端除錯視窗傳送載入小程式mater層等初始化資訊;
  • 遠端除錯視窗收到資訊後,初始化遠端除錯環境,新建woker,並在worker中載入小程式的master層;
  • 客戶端的master socket傳送資訊,當遠端除錯視窗收到資訊後,通過worker將訊息轉發給master page;
  • master page監聽worker派發的訊息,完成相應處理後,worker將結果傳送給主執行緒;
  • 主執行緒再根據訊息型別,通過socket回傳客戶端或進行相應的操作。
    圖片

slave頁面檢視同步

遠端除錯視窗和百度 App 客戶端中的 slave 頁面通過 slave socket 完成同步。客戶端中的小程式頁面是多層的,每個slave頁面都儲存了一個slave socket;而遠端除錯視窗中只儲存了一個slave socket,這些slave socket之間通過socket server轉發資訊完成資訊的交換。

圖片
當在客戶端中開啟新的頁面時,遠端除錯視窗中的 slave socket 會斷開原來的連線,重新建立一個與新頁面 slave page2 通訊的 socket 連線,slave page2 中的 document observer 監聽 dom 樹的變化,slave socket 轉發變化資訊給遠端除錯端的 socket,遠端除錯視窗的 socket 收到資訊後,根據資訊完成本地 dom 樹的構建,實現檢視的同步。
圖片

結語

首尾呼應一下:遠端除錯是真機除錯中最便捷的一種,開發者只需掃碼即可在手機上除錯小程式,無需關心繫統相容性等問題,無需關心繫統相容性等問題哦。


Tips:

在除錯 IOS 時,Javascript 執行在 JavaScriptCore 上,也就是 Safari 所使用的 JavaScript 引擎,而遠端除錯視窗中的小程式 Javascript 檔案執行在 V8 環境下,極少情況下會出現 bug。

常見錯誤:iOS 上有部分日期建構函式未實現。

相關文章