淺談目前移動(dòng)端新技術(shù)

目前移動(dòng)端新技術(shù)履植,PA銀行這邊使用到的有Weex象颖、Tangram、RN家淤、Flutter
接下來淺談一下Weex匙睹、Tangram愚屁、RN的東西

1.Weex

1.1:前端開發(fā)可以寫熟悉vue語法的單文件,然后打包成出來一份dist —— JS Bundle痕檬,然后部署到服務(wù)器上
---這一步其實(shí)坑也很多霎槐,有些語法只有ios可以運(yùn)行,有些只有Android可以運(yùn)行

1.2:客戶端打開某一個(gè)頁面梦谜,通過網(wǎng)絡(luò)下載JS Bundle丘跌,然后在客戶端本地執(zhí)行該JS Bundle
客戶端提供了JS的執(zhí)行引擎(JSCore)用于執(zhí)行遠(yuǎn)程加載到JS Bundle

1.3:JS執(zhí)行引擎執(zhí)行JS Bundle,和瀏覽器的過程類似改淑,JS Bundle 的代碼被執(zhí)行,生成VNode 樹進(jìn)行patch浴讯,找出最小操作DOM節(jié)點(diǎn)的操作朵夏,把對(duì)DOM節(jié)點(diǎn)的操作轉(zhuǎn)變?yōu)镹ative DOM API, 調(diào)用WXBridge 進(jìn)行通信

1.4:WXBridge將渲染指令分發(fā)到native(Andorid、iOS)渲染引擎榆纽,由native渲染引擎完成最終的頁面渲染

簡單來說仰猖,靠什么渲染捏肢?
你可以把 weex-vue-framework 框架當(dāng)成被改造的Vue.js。語法和內(nèi)部機(jī)制都是一樣的饥侵,只不過Vue.js最終創(chuàng)建的是 DOM 元素鸵赫,而weex-vue-framework則是向原生端發(fā)送渲染指令,最終渲染生成的是原生組件躏升。

了解完基本原理外辩棒,框架一搭建,差不多就可以進(jìn)入Weex踩坑之路
但是Weex的通信膨疏,這一塊還是得了解一下一睁。

現(xiàn)在的hybrid開發(fā)當(dāng)中,就協(xié)議和注入用得比較多佃却,PA銀行2.0的時(shí)候還是使用的cordova者吁,大單頁模式,讓你卡的無解饲帅,后續(xù)引入了新框架复凳,借鑒了EasyJsWebView的想法,自研發(fā)了一套自己的Hybrid灶泵,這里就不詳細(xì)描述育八。同時(shí)作為一名ios開發(fā),也需要知道丘逸,wk瀏覽器還新增了一個(gè)messagehandlers单鹿,可以在js中通過window.webkit.messagehandlers實(shí)現(xiàn)hybrid。
接下來我們隨便聊聊協(xié)議深纲,注入這兩種

協(xié)議:這里需要引入iframe標(biāo)簽仲锄,可以自行百度一下,使用iframe設(shè)置src例如
thor://phone.call?[{"num":"10086"},"174d3df76c0_function_1_phone_call_callback"]
那么native收到這個(gè)后進(jìn)行解析湃鹊,NSInvocation的分發(fā)儒喊,最終完成一次調(diào)用。當(dāng)然銀行當(dāng)時(shí)為了支持iOS7币呵,還使用了UIWebView怀愧,UIWebView通過objc_messageSend支持多參數(shù)的同步組件,wk瀏覽器還沒有穩(wěn)定可用的方案

注入:可以熟悉一下JavaScriptCore余赢,這個(gè)無非是JSContext+JSVale芯义,通過evaluateScript調(diào)用,從h5到native的調(diào)用妻柒,這里也涉及到兩個(gè)點(diǎn)扛拨,block和JSExport,block是暴露單個(gè)方法举塔,JSExport是暴露一個(gè)oc對(duì)象

這一塊绑警,附帶一個(gè)鏈接給大家做詳細(xì)了解求泰,有興趣的可以看看
http://www.reibang.com/p/3f5dc8042dfc

好了,言歸正傳
先說頁面->Native
從源碼上剖析计盒,是用了注入JavaScriptCore渴频,注入一個(gè)callNativeModule的方法,頁面調(diào)用傳入instanceIdString(組件id)北启、moduleNameString(組件對(duì)象)卜朗、methodNameStrin(組件方法)、argsArray(參數(shù))暖庄、optionsDic
再根據(jù)上述數(shù)據(jù)聊替,使用NSInvocation給到Native發(fā)送消息

那么Native->頁面又是如何呢
先說異步的:
weex是通過一個(gè)block進(jìn)行回調(diào)的,這個(gè)block在頁面->Native的時(shí)候培廓,是有一個(gè)實(shí)現(xiàn)的惹悄,在具體的組件中,如果有相應(yīng)的block回調(diào)肩钠,那么就會(huì)回到這里泣港,把參數(shù)通過WXBridgeProtocol類中有一個(gè)callJSMethod的方法,回傳到H5价匠,這里還有一個(gè)keepAlive的概念当纱,就不多述了
同步:還沒研究透徹,后面補(bǔ)充

2.Tangram
這里重點(diǎn)關(guān)注
1.Core(負(fù)責(zé)復(fù)用和回收)
2.Layout(負(fù)責(zé)布局)
3.EventBus(負(fù)責(zé)通信)
4.Helper(簡化代碼踩窖,快速布局)

這個(gè)大致就是動(dòng)態(tài)模板坡氯,大致可以理解為,一份json解析并到最后渲染的過程
模板內(nèi)容根據(jù)json里面對(duì)應(yīng)的參數(shù)賦值洋腮,那模板后續(xù)可復(fù)用性就會(huì)很高箫柳,哪怕業(yè)務(wù)方不一樣,只要做好字段的映射和埋點(diǎn)字段的補(bǔ)充(這里需要中臺(tái)和字段映射轉(zhuǎn)換)啥供,大概幾年的積累悯恍,就可以混合搭配很多樣式的頁面,越做越強(qiáng)伙狐。

3.RN
RN這塊技術(shù)棧涮毫,在銀行這邊用得不多,但是作為全干攻城獅贷屎,了解其原理罢防,搞搞幾個(gè)頁面,還是一門必修課
RN唉侄,先談界面
他拋開了webview咒吐,能夠運(yùn)行起來,全靠 Objective-C 和 JavaScript 的交互,JavaScriptCore我這邊就不多說了渤滞,網(wǎng)上一抓一大把例子

這里做一個(gè)對(duì)比,
RN使用JavaScriptCore作為其引擎榴嗅,Weex則使用V8引擎
RN需要編寫ios和Android兩份代碼妄呕,Weex則一份,
RN起步比較早和成熟嗽测,Weex則是個(gè)新生兒

RN的框架:React.js組件化绪励,數(shù)據(jù)綁定 Virtual DOM JSX模板學(xué)習(xí)使用有一定的成本
Weex的框架:Vue.JS 組件化,數(shù)據(jù)綁定 Virtual DOM 模板就是普通的html唠粥,數(shù)據(jù)綁定使用mustache風(fēng)格疏魏,樣式直接使用css

4.Flutter
有空再聊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晤愧,隨后出現(xiàn)的幾起案子大莫,更是在濱河造成了極大的恐慌,老刑警劉巖官份,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件只厘,死亡現(xiàn)場離奇詭異,居然都是意外死亡舅巷,警方通過查閱死者的電腦和手機(jī)羔味,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钠右,“玉大人赋元,你說我怎么就攤上這事§浚” “怎么了搁凸?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長情屹。 經(jīng)常有香客問我坪仇,道長,這世上最難降的妖魔是什么垃你? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任椅文,我火速辦了婚禮,結(jié)果婚禮上惜颇,老公的妹妹穿的比我還像新娘皆刺。我一直安慰自己,他們只是感情好凌摄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布羡蛾。 她就那樣靜靜地躺著,像睡著了一般锨亏。 火紅的嫁衣襯著肌膚如雪痴怨。 梳的紋絲不亂的頭發(fā)上忙干,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音浪藻,去河邊找鬼捐迫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爱葵,可吹牛的內(nèi)容都是我干的施戴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼萌丈,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼赞哗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辆雾,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤肪笋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后度迂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涂乌,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年英岭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湾盒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诅妹,死狀恐怖罚勾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吭狡,我是刑警寧澤尖殃,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站划煮,受9級(jí)特大地震影響送丰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弛秋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一器躏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟹略,春花似錦登失、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春馅巷,著一層夾襖步出監(jiān)牢的瞬間膛虫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工钓猬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留走敌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓逗噩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親跌榔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子异雁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353