在即將為祖國麻麻慶生的日子裡,小編帶著開心愉悅興奮期待的心情,為大家帶來本週的更文,講一講智慧小程式遠端除錯的小祕密哦~
真機除錯是小程式的重要除錯方法,可以幫助開發者在真機上除錯程式碼,快速查詢和定位真機中的 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 上有部分日期建構函式未實現。