日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

QQ浏览器HD的动态化方案QBDF的前世今生(1)【简书被冻结-搬运】

發布時間:2024/3/26 HTML 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QQ浏览器HD的动态化方案QBDF的前世今生(1)【简书被冻结-搬运】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原作時間:2019~2021年

此次共享,騰訊內網 / 外網同步發布。

內部代碼地址:https://git.code.oa.com/fatboyli/QBDF

外部代碼地址:GitHub - ventureli/QBDF

兩年前的一個混淆包(無源碼):GitHub - ventureli/VLOCInterpreter

作者:騰訊fatboyli(李文強)

1.立項

大約在2017年的時候,QQ瀏覽器IPAD項目組還在北京,那時候AppStore上架還比較慢,我們項目組決定做自己的動態化框架,動態化框架的目標是:真正實現一次發版本,多次發布。

整個iPAD項目組對整個市場的動態化框架做了一次比較深入的研究(為期一周)當時團隊的分工如下:如今小伙伴都以天各一方,懷念和大家一起戰斗的日子。

項目組分工

最開始我們并沒有信心完全從0開始做一個全新的動態化框架,我們的想法是從WEEX上進行更改和擴展,形成QB團隊自己的動態化框架。這一決定其實浪費我大約1.5個月的時間。WEEX的核心問題非常嚴重。整個動態化框架的設計和實現工作最后交給我來實現。

2.第一版本架構

接到任務后,大約利用了2周左右的時間對WEEX的源碼進行了了解,我們第一步對weex的整個一些UI層面的限制進行了修正。主要有如下幾個方面:(當時版本的weex比較早,現在這些問題可能已經不存在了。)

1.不支持完全比例排版(比如子控件的高度是父控件的寬度的50%)

2.對旋轉屏幕的支持

3.添加iOS的特有屬性支持(比如對tableView的group的形勢的支持)

4.修正BUG

上面的內容我就不展開說明了,這并不是本系列文章的重點,但是里面有非常多有意思的小trick。有興趣的同學可以單獨聯系我。

以上主要是針對UI層面的。但是WEEX在邏輯層面有天生的短板,它和RN是完全一樣,采用預先注冊的形勢進行和Native交互,這只能算作是跨平臺,并不能算作完全能力的動態化,我猜想這也是蘋果之所以沒有對RN和WEEX動手的原因。比如我在WEEX要用的某個NATIVE寫好的BUTTON,那么這個BUTTON在WEEX引擎初始化的時候用以下代碼注冊好。

[WeexSDKEngine registerModule:xxxx WithClass:XXX]

這就根本算不上動態化了,這也造成了WEEX還不能夠進行打PATCH。

第一版本架構

3.第二版本架構

但是 等等,當時是有能夠完全能力動態運行和打PATCH的框架的偶~ YES, JSPATCH!所以我當初想的是用WEEX處理UI層面的操作,用JSPATCH來做邏輯層面的引擎從而達到無限制的動態化能力。架構大約是這個樣子。

第二版本的架構

這里面的核心問題是怎么WEEX的腳本里嵌入JS腳本,這個設計也是比較有意思的,我設計的幾個宏字符串

_OBJC_JSP_REGISTERTARG_(注冊參數)

_OBJC_JSP_JSCALL_START_(JSPATCH代碼開始)

_OBJC_JSP_JSCALL_END_(JSPATCH代碼結束)

_OBJC_JSP_JSCALL_RETURN_(輸出變量)

通過這幾個宏字符串可以完成JSPATCH代碼內嵌到WEEX里。這幾個宏定義我也不展開詳細介紹了,大致的思路是JSPATCH運行的時候先通過全局替換的方案,把這些字符串替換為一個內置的方法,比如 XXX_CALL(1),這樣,然后把每段JSPATCH代碼編號,這樣當運行到XXX_CALL 這個方法時候,就能知道要去取什么JSPATCH腳本了。同時_OBJC_JSP_REGISTERTARG_方法預先注入參數,_OBJC_JSP_JSCALL_RETURN_ 輸出參數即可。此時的代碼看起來是這個樣子的。

WEEX橋接JSPATCH

3.第三版本架構

完成了以上的工作,我們第一個QBDF框架就實現了。但是在此基礎上我重新做了一個擴展,基于以下的想法。

WEEX是JS,HTML也可以運行JS

WEEX的JS可以橋接JSPATCH,那么HTML應該也可以橋接JSPATCH

HTML的JSPATCH是需要做加密的,否則會暴露NATIVE邏輯

所以我重新設計了一個新的模塊作為QBDF的補充,就是 HTML+JS+CSS +資源 打包成為ZIP作為WEBAPP,通過后臺模塊下發和維護,同時JS橋接JSPATCH代碼實現WEBAPP能力無限制。

如上后第三版本的框架的架構圖如下。

第三版本框架

4.第四版本架構

以上框架完成后,基本上已經完成我們最初的想法,確實是一個有動態化能力的框架,

Weex開源代碼深度定制,UI動態化

可動態配置

可以調用幾乎任意代碼,無須注冊

雖有學習成本,VUE和JS比較好學

未來只要解決bug即時更新開源代碼就可以了

但是其實在這個過程中,發現了幾個問題。我做了如下的考慮。

SPATCH和WEEX都是基于JAVASCRIPTCORE的,都是基于WEBTHREAD的。而我們瀏覽器里面有大量的WEBVIEW一旦代碼寫的不注意就回出現死鎖,甚至有時候無法避免以至于不能打PATCH,這也是我們和其他APP比較特殊的地方。

QBDF不應該是這樣一個修修補補的二流框架!

還沒達到我自己的要求

所以最后我們重新設計了整個QBDF框架,從0開始寫一個OC語言的解釋器和虛擬機動態運行OC代碼,一個完全基于編譯原理層面的動態運行OC語言的解決方案。第四版本的家購入如下。

第四版本QBDF腳本

好了,本文到這里就結束了,我們的QBDF經歷過很多版本的迭代。

總結

以上是生活随笔為你收集整理的QQ浏览器HD的动态化方案QBDF的前世今生(1)【简书被冻结-搬运】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。