AppHost1.0 發(fā)布

AppHost:大前端融合下的 Hybrid 開發(fā)解決方案

AppHost

目前移動端開發(fā)還處于一個高速發(fā)展的階段,為了應(yīng)對快速增長業(yè)務(wù)需求,移動開發(fā)需要更高迭代響應(yīng)速度,從前期涌現(xiàn)出了以 React Native、Weex 為代表的 web 技術(shù)棧,到現(xiàn)在的 flutter 為代表的容器棧,這些跨度開發(fā)框架試圖提高開發(fā)效率的同時,也擁有優(yōu)秀的運(yùn)行效率,目前看起來正在接近這個目標(biāo)。
這些技術(shù),加上 native 開發(fā)技術(shù),在不同應(yīng)用場景下,我們可以選擇最合適的技術(shù)棧,而最古老的跨端技術(shù)方案 - Hybrid, 在中小型項(xiàng)目和不復(fù)雜的需求中,依然是最合適的選擇,目前在網(wǎng)易嚴(yán)選主站,商品詳情、促銷活動、第三方頁面展示還是用 Hybrid 實(shí)現(xiàn)的。 AppHost 提供的就是傳統(tǒng)意義上用 web 技術(shù)為 native 開發(fā)業(yè)務(wù)功能的能力。

AppHost 是一套解決 H5 和 native 協(xié)作開發(fā)的整體框架和服務(wù)。試圖解決 native 和 H5 目前迭代頻繁、時間倉促造成質(zhì)量不高,業(yè)務(wù)膨脹后代碼混亂,兩端聯(lián)調(diào)困難,多端協(xié)作彼此割裂等痛點(diǎn)。
作為一種 JSBridge 的實(shí)現(xiàn)方法,AppHost 像一座橋,將 native 和 H5 開發(fā)打通;
一邊是提供設(shè)計(jì)良好的 native framework 和相關(guān) protocol ,提高 native 接口的交付能力和開發(fā)質(zhì)量;
一邊是為 H5 開發(fā)的頁面和 native 聯(lián)調(diào),提供輔助調(diào)試工具和性能調(diào)優(yōu)工具,讓前端開發(fā)者對 H5 in App 的調(diào)試體驗(yàn)像調(diào)試原生瀏覽器一樣,從而提高質(zhì)量和提升開發(fā)效率。

Hybrid 的接口開發(fā)生命周期

生命周期

這是實(shí)際工作中 JSBridge 面對的工作,很多是重復(fù)、乏味,又容易出錯的。常見場景——“新需求里需要增加新的接口”的流程是這樣的:

  1. 新增一個文件或者在舊文件上編寫代碼,新開接口和屬性
  2. 在 Android、native 和 H5 共有的接口文檔上補(bǔ)充 API 接口。如果有需要,需要升級 JSBridge 接口的版本號
  3. 將改動通知 Android、H5 等相關(guān)方
  4. 增加測試用例(testcase 應(yīng)該 iOS 、Android、 QA、前端,共建測試用例)
  5. 如果有必要需要告知,QA 增加自動化測試用例
  6. 前端需要考慮版本號升級之后,需不需要對新舊 native App 做兼容實(shí)現(xiàn)

AppHost 處理負(fù)責(zé) JSBridge 接口從 0 到 N 個、1歲到 5歲、出生到死亡周期,以及 JSBridge 之間的關(guān)系管理、對外提供數(shù)據(jù)支持等工作,所以它是解決方案,而不是個技術(shù)方案(如WebViewJavascriptBridge只是技術(shù)方案)。

AppHost 的功能總覽

功能總覽

分兩部分,AppHost Core 為 native 開發(fā)提供基礎(chǔ)模塊和基本功能封裝;AppHost Debug Service 為 native、H5 前端、QA 等人員提供調(diào)試服務(wù)。下面詳細(xì)介紹功能。

AppHostCore

  1. webview 核心,包含常見需求的實(shí)現(xiàn)邏輯,包括
  • native 和 H5 的通訊協(xié)議,封裝了 native 端解析、H5 端發(fā)送邏輯。native 開發(fā)人員只需要面向業(yè)務(wù)編碼,然后通知 H5; H5 開發(fā)面向業(yè)務(wù)開發(fā),只需關(guān)心兩個接口。
  • 新增接口用繼承 AppHostResponse 的方式實(shí)現(xiàn),解決業(yè)務(wù)需求增長、代碼無序膨脹的問題。特別的,支持業(yè)務(wù)接口的延遲加載,不使用的接口,不會初始化。
  • Cookie管理,最煩人的 Cookie 丟失和 Cookie 同步問題,已經(jīng)內(nèi)部妥善處理
  • 一些人性化的小優(yōu)化。更合理的進(jìn)度條、瀏覽歷史滾動記憶、增強(qiáng)的 native 執(zhí)行 js 代碼能力、基本的 API 接口調(diào)用鑒權(quán)等等。
  1. JSBridge 接口管理
  • 獨(dú)立于 App 的版本號,H5 使用特性嗅探實(shí)現(xiàn)新舊 App 的兼容,簡單直觀。
  • API 接口簽名,可實(shí)現(xiàn) API 參數(shù)粒度的接口升級和開關(guān)管理。
  1. 資源加載
  • 加載遠(yuǎn)程 URL,單向同步 Cookie 到 WKWebView。
  • 本地文件夾資源,可實(shí)現(xiàn)用離線包渲染動態(tài)頁面。
  • 某些業(yè)務(wù)場景下,可實(shí)現(xiàn) HTML 里的 xhr、js、css 資源請求攔截,不需要動用私有 webkit API。
  1. API 接口文檔一體化和 testcase 自動化
    對于“native 為 H5 提供接口” 這件事情,如前述,需要多方的協(xié)調(diào)同步,很容易出現(xiàn):接口文檔過時、文檔缺失、接口查找麻煩、接入新 API 不直觀、測試不方便,QA 回歸不充分,或者是多個環(huán)節(jié)重復(fù)寫測試用例等壞情況。
    AppHost 的 API 文檔模塊,將這些環(huán)節(jié)需要的文檔和測試用例,全部集中到開發(fā)階段完成,后續(xù) H5 查詢的 API 文檔、QA 走查用例、自動化測試,全部自動生成。保證接口文檔的最新,省去多個環(huán)節(jié)的重復(fù)建設(shè),內(nèi)置的自動化測試支持,方便 QA 使用腳本回歸測試。

AppHost Debug Service

  1. Remote Debugger 通過電腦瀏覽器提供 Debug Service
    電腦瀏覽器具有訪問方便、可展示區(qū)域大、輸入快捷方便、易于集成第三方調(diào)試工具的特點(diǎn)。相同的調(diào)試功能,理論上也可以集成在手機(jī) App端,但是體驗(yàn)會大打折扣,是個低效的調(diào)試方案。
  2. 幫助系統(tǒng)和文檔。
    在瀏覽器端 Console ,實(shí)現(xiàn)了一個小型命令行程序,指導(dǎo)用戶如何使用本 Remote Debugger;同時還提供 即時查詢 API 接口 名稱、參數(shù)解釋、示例代碼等功能,讓你的工作流不需要切換到打開的API 文檔文件或者瀏覽器,保持操作上下文。
  3. REPL(Read-Eval-Print Loop)環(huán)境
    Console 里實(shí)現(xiàn)了完整 webview 執(zhí)行環(huán)境,將傳統(tǒng)語言的探索、調(diào)試新特性的體驗(yàn)帶到 Remote Debugger,如同 Bash 的shell prompt和 ruby 的irb那樣。在這里輸入的所有命令如同在遠(yuǎn)端 webview 的 console 里執(zhí)行一樣。當(dāng)然還有Off mobileOn mobile來切換當(dāng)前命令是本地執(zhí)行還是遠(yuǎn)端 webview 執(zhí)行。
  4. 輔助功能
    Console 提供了左側(cè)快捷命令;內(nèi)置了命令的歷史記憶,實(shí)現(xiàn)上下箭頭遍歷;支持:clear,清除當(dāng)前界面等功能
  5. 擴(kuò)展性
  • 和 Safari 的 Develop 工具配合
    我們知道 Safari Develop 工具是在頁面打開后才會出現(xiàn)。如果我們有個頁面由 302 跳轉(zhuǎn),我們想抓到想要的請求是做不到的。接入 AppHost 之后,我們保持Safari Develop 工具打開的狀態(tài),在 Remote Debugger 輸入命令 ,讓當(dāng)前 webview 加載初始 URL,這樣我們就可以抓到從 302 跳轉(zhuǎn)開始后的網(wǎng)絡(luò)請求了。
  • 集成 weinre。
    通過:weinre -- 命令,不需要改動被調(diào)試頁面的源碼,即可提供 weinre 調(diào)試服務(wù),而且一次注入當(dāng)前 App 啟動后全程有效,后續(xù)頁面無需再注入。用這個特性,甚至可以調(diào)試第三方頁面。
  • 支持 console.log。這個無需贅言,曾經(jīng)的` https://jsconsole.com/ 是首選的遠(yuǎn)程調(diào)試服務(wù)。AppHost 內(nèi)置此功能。
  1. 演示
    6.1 基本操作演示
    Debugger 整體使用

    6.2 查看嚴(yán)選首頁的 onload 事件時間
    查看當(dāng)前 H5 頁面的 timing 數(shù)據(jù)

    6.3 使用 weinre 調(diào)試嚴(yán)選頁面
    weinre服務(wù)

AppHost 愿景目標(biāo)

AppHost 來自作者近年 webview 開發(fā)實(shí)踐總結(jié),真切的感受到這套設(shè)計(jì)在面對業(yè)務(wù)快速發(fā)展、技術(shù)重構(gòu)需求、多端協(xié)作等方面的優(yōu)越性,特整理分享出來,不僅面向我們以后的業(yè)務(wù)開發(fā),也希望拋磚引玉,和各位同行共享知識,以

  1. 指導(dǎo) native 端業(yè)務(wù)成長、保持 App 可擴(kuò)展、可維護(hù)
  2. 輔助 H5 快速開發(fā)、性能調(diào)優(yōu),提高產(chǎn)品體驗(yàn)

在此,希望 AppHost 能幫你解決在 webview 相關(guān)開發(fā)過程中遇到的常見問題,讓你更多的時間花在如何完善業(yè)務(wù)邏輯,加快 App 成長上面,為你的開發(fā)工作帶來切實(shí)的幫助,避免 996,享受工作和生活樂趣。

采用AppHost 的 App 有哪些?

目前 AppHost 只有 iOS 端。其中 AppHost Core 在網(wǎng)易有錢上使用了 3 年多,支持了網(wǎng)易有錢的不斷增長的業(yè)務(wù)需求,期間解決了很多 WKWebView 遇到的通有的問題。 AppHost Debug Service 目前還沒有在線上系統(tǒng)中使用,目前正逐步將 AppHost 整體接入網(wǎng)易嚴(yán)選和網(wǎng)易推手。

使用指南

詳細(xì)的技術(shù)方案和接入方式見以下鏈接

  1. AppHostExample 項(xiàng)目,https://github.com/hite/AppHostExample
  2. AppHost 項(xiàng)目,https://github.com/hite/AppHost
    希望各位同行也能分享各自解決方案,共同提高行業(yè) Hybrid 開發(fā)體驗(yàn)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 鏈接:http://www.itdecent.cn/p/fd61e8f4049e 一、簡介 這部分主要介紹下 W...
    柒黍閱讀 1,991評論 0 4
  • 關(guān)于 android Webview 基本使用 加載html四種方式 簡單使用 在AndroidManifest....
    小面包屑閱讀 5,637評論 2 13
  • 這篇博客主要來介紹 WebView 的相關(guān)使用方法,常見的幾個漏洞,開發(fā)中可能遇到的坑和最后解決相應(yīng)漏洞的源碼,以...
    Shawn_Dut閱讀 7,558評論 3 55
  • 2018年12月28日是今年最后的兩天了,雪公子頻頻到訪,今天霧仙女也翩然而至。 到處朦朦朧朧,飄飄渺渺,...
    天山青鳥閱讀 408評論 0 0
  • 新年來上班的第一天,超級想辭職。忘不了臨走時媽媽不舍的眼光,老媽年齡太大,最小的我是她最放心不下的。 ...
    一個碎碎念的人閱讀 185評論 0 0

友情鏈接更多精彩內(nèi)容