摘要:接口管理獨立于的版本號,使用特性嗅探實現(xiàn)新舊的兼容,簡單直觀。其中在網(wǎng)易有錢上使用了年多,支持了網(wǎng)易有錢的不斷增長的業(yè)務需求,期間解決了很多遇到的通有的問題。目前還沒有在線上系統(tǒng)中使用,目前正逐步將整體接入網(wǎng)易嚴選和網(wǎng)易推手。
目前移動端開發(fā)還處于一個高速發(fā)展的階段,為了應對快速增長業(yè)務需求,移動開發(fā)需要更高迭代響應速度,從前期涌現(xiàn)出了以 React Native、Weex 為代表的 web 技術(shù)棧,到現(xiàn)在的 flutter 為代表的容器棧,這些跨度開發(fā)框架試圖提高開發(fā)效率的同時,也擁有優(yōu)秀的運行效率,目前看起來正在接近這個目標。
這些技術(shù),加上 native 開發(fā)技術(shù),在不同應用場景下,我們可以選擇最合適的技術(shù)棧,而最古老的跨端技術(shù)方案 - Hybrid, 在中小型項目和不復雜的需求中,依然是最合適的選擇,目前在網(wǎng)易嚴選主站,商品詳情、促銷活動、第三方頁面展示還是用 Hybrid 實現(xiàn)的。 AppHost 提供的就是傳統(tǒng)意義上用 web 技術(shù)為 native 開發(fā)業(yè)務功能的能力。
AppHost 是一套解決 H5 和 native 協(xié)作開發(fā)的整體框架和服務。試圖解決 native 和 H5 目前迭代頻繁、時間倉促造成質(zhì)量不高,業(yè)務膨脹后代碼混亂,兩端聯(lián)調(diào)困難,多端協(xié)作彼此割裂等痛點。
作為一種 JSBridge 的實現(xiàn)方法,AppHost 像一座橋,將 native 和 H5 開發(fā)打通;
一邊是提供設計良好的 native framework 和相關 protocol ,提高 native 接口的交付能力和開發(fā)質(zhì)量;
一邊是為 H5 開發(fā)的頁面和 native 聯(lián)調(diào),提供輔助調(diào)試工具和性能調(diào)優(yōu)工具,讓前端開發(fā)者對 H5 in App 的調(diào)試體驗像調(diào)試原生瀏覽器一樣,從而提高質(zhì)量和提升開發(fā)效率。
這是實際工作中 JSBridge 面對的工作,很多是重復、乏味,又容易出錯的。常見場景——“新需求里需要增加新的接口”的流程是這樣的:
新增一個文件或者在舊文件上編寫代碼,新開接口和屬性
在 Android、native 和 H5 共有的接口文檔上補充 API 接口。如果有需要,需要升級 JSBridge 接口的版本號
將改動通知 Android、H5 等相關方
增加測試用例(testcase 應該 iOS 、Android、 QA、前端,共建測試用例)
如果有必要需要告知,QA 增加自動化測試用例
前端需要考慮版本號升級之后,需不需要對新舊 native App 做兼容實現(xiàn)
AppHost 處理負責 JSBridge 接口從 0 到 N 個、1歲到 5歲、出生到死亡周期,以及 JSBridge 之間的關系管理、對外提供數(shù)據(jù)支持等工作,所以它是解決方案,而不是個技術(shù)方案(如WebViewJavascriptBridge只是技術(shù)方案)。
AppHost 的功能總覽分兩部分,AppHost Core 為 native 開發(fā)提供基礎模塊和基本功能封裝;AppHost Debug Service 為 native、H5 前端、QA 等人員提供調(diào)試服務。下面詳細介紹功能。
AppHostCorewebview 核心,包含常見需求的實現(xiàn)邏輯,包括
native 和 H5 的通訊協(xié)議,封裝了 native 端解析、H5 端發(fā)送邏輯。native 開發(fā)人員只需要面向業(yè)務編碼,然后通知 H5; H5 開發(fā)面向業(yè)務開發(fā),只需關心兩個接口。
新增接口用繼承 AppHostResponse 的方式實現(xiàn),解決業(yè)務需求增長、代碼無序膨脹的問題。特別的,支持業(yè)務接口的延遲加載,不使用的接口,不會初始化。
Cookie管理,最煩人的 Cookie 丟失和 Cookie 同步問題,已經(jīng)內(nèi)部妥善處理
一些人性化的小優(yōu)化。更合理的進度條、瀏覽歷史滾動記憶、增強的 native 執(zhí)行 js 代碼能力、基本的 API 接口調(diào)用鑒權(quán)等等。
JSBridge 接口管理
獨立于 App 的版本號,H5 使用特性嗅探實現(xiàn)新舊 App 的兼容,簡單直觀。
API 接口簽名,可實現(xiàn) API 參數(shù)粒度的接口升級和開關管理。
資源加載
加載遠程 URL,單向同步 Cookie 到 WKWebView。
本地文件夾資源,可實現(xiàn)用離線包渲染動態(tài)頁面。
某些業(yè)務場景下,可實現(xiàn) HTML 里的 xhr、js、css 資源請求攔截,不需要動用私有 webkit API。
API 接口文檔一體化和 testcase 自動化
對于“native 為 H5 提供接口” 這件事情,如前述,需要多方的協(xié)調(diào)同步,很容易出現(xiàn):接口文檔過時、文檔缺失、接口查找麻煩、接入新 API 不直觀、測試不方便,QA 回歸不充分,或者是多個環(huán)節(jié)重復寫測試用例等壞情況。
AppHost 的 API 文檔模塊,將這些環(huán)節(jié)需要的文檔和測試用例,全部集中到開發(fā)階段完成,后續(xù) H5 查詢的 API 文檔、QA 走查用例、自動化測試,全部自動生成。保證接口文檔的最新,省去多個環(huán)節(jié)的重復建設,內(nèi)置的自動化測試支持,方便 QA 使用腳本回歸測試。
Remote Debugger 通過電腦瀏覽器提供 Debug Service
電腦瀏覽器具有訪問方便、可展示區(qū)域大、輸入快捷方便、易于集成第三方調(diào)試工具的特點。相同的調(diào)試功能,理論上也可以集成在手機 App端,但是體驗會大打折扣,是個低效的調(diào)試方案。
幫助系統(tǒng)和文檔。
在瀏覽器端 Console ,實現(xiàn)了一個小型命令行程序,指導用戶如何使用本 Remote Debugger;同時還提供 即時查詢 API 接口 名稱、參數(shù)解釋、示例代碼等功能,讓你的工作流不需要切換到打開的API 文檔文件或者瀏覽器,保持操作上下文。
REPL(Read-Eval-Print Loop)環(huán)境
Console 里實現(xiàn)了完整 webview 執(zhí)行環(huán)境,將傳統(tǒng)語言的探索、調(diào)試新特性的體驗帶到 Remote Debugger,如同 Bash 的 shell prompt和 ruby 的irb 那樣。在這里輸入的所有命令如同在遠端 webview 的 console 里執(zhí)行一樣。當然還有Off mobile 和On mobile 來切換當前命令是本地執(zhí)行還是遠端 webview 執(zhí)行。
輔助功能
Console 提供了左側(cè)快捷命令;內(nèi)置了命令的歷史記憶,實現(xiàn)上下箭頭遍歷;支持 :clear ,清除當前界面等功能
擴展性
和 Safari 的 Develop 工具配合
我們知道 Safari Develop 工具是在頁面打開后才會出現(xiàn)。如果我們有個頁面由 302 跳轉(zhuǎn),我們想抓到想要的請求是做不到的。接入 AppHost 之后,我們保持Safari Develop 工具打開的狀態(tài),在 Remote Debugger 輸入命令 ,讓當前 webview 加載初始 URL,這樣我們就可以抓到從 302 跳轉(zhuǎn)開始后的網(wǎng)絡請求了。
集成 weinre。
通過:weinre -- 命令,不需要改動被調(diào)試頁面的源碼,即可提供 weinre 調(diào)試服務,而且一次注入當前 App 啟動后全程有效,后續(xù)頁面無需再注入。用這個特性,甚至可以調(diào)試第三方頁面。
支持 console.log。這個無需贅言,曾經(jīng)的` https://jsconsole.com/ 是首選的遠程調(diào)試服務。AppHost 內(nèi)置此功能。
演示
6.1 基本操作演示
6.2 **查看嚴選首頁的 onload 事件時間**
6.3 **使用 weinre 調(diào)試嚴選頁面**AppHost 愿景目標
AppHost 來自作者近年 webview 開發(fā)實踐總結(jié),真切的感受到這套設計在面對業(yè)務快速發(fā)展、技術(shù)重構(gòu)需求、多端協(xié)作等方面的優(yōu)越性,特整理分享出來,不僅面向我們以后的業(yè)務開發(fā),也希望拋磚引玉,和各位同行共享知識,以
指導 native 端業(yè)務成長、保持 App 可擴展、可維護
輔助 H5 快速開發(fā)、性能調(diào)優(yōu),提高產(chǎn)品體驗
在此,希望 AppHost 能幫你解決在 webview 相關開發(fā)過程中遇到的常見問題,讓你更多的時間花在如何完善業(yè)務邏輯,加快 App 成長上面,為你的開發(fā)工作帶來切實的幫助,避免 996,享受工作和生活樂趣。
采用AppHost 的 App 有哪些?目前 AppHost 只有 iOS 端。其中 AppHost Core 在網(wǎng)易有錢上使用了 3 年多,支持了網(wǎng)易有錢的不斷增長的業(yè)務需求,期間解決了很多 WKWebView 遇到的通有的問題。 AppHost Debug Service 目前還沒有在線上系統(tǒng)中使用,目前正逐步將 AppHost 整體接入網(wǎng)易嚴選和網(wǎng)易推手。
使用指南詳細的技術(shù)方案和接入方式見以下鏈接
AppHostExample 項目,https://github.com/hite/AppHo...
AppHost 項目,https://github.com/hite/AppHost
希望各位同行也能分享各自解決方案,共同提高行業(yè) Hybrid 開發(fā)體驗。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103816.html
摘要:歡迎使用中文文檔架構(gòu)概覽是網(wǎng)易項目團隊開發(fā)的一個基于進行開發(fā)的應用層框架,提供了一個輕量級的容器來編寫簡單可維護的。 JavaScript 可以……嘛,不就是操作一下 DOM,可以讓元素飛來飛去嗎JavaScript 是……不就是用 jQuery 讓網(wǎng)頁動起來,頂多就是再用用 Ajax 和后端進行一下數(shù)據(jù)交換嗎JavaScript 是一門……最討厭和鄙視這種弱類型不需要編譯的腳本語言...
閱讀 1537·2021-11-24 10:17
閱讀 1031·2021-09-29 09:43
閱讀 2165·2021-09-23 11:21
閱讀 2160·2019-08-30 14:13
閱讀 1295·2019-08-29 13:58
閱讀 3157·2019-08-28 17:51
閱讀 1803·2019-08-26 13:29
閱讀 2973·2019-08-26 10:13