[教程]「微信小程序」剖析:原生的實時DOM轉(zhuǎn)Virtual DOM

在之前的幾篇文章里鸡典,我們討論了MINA的一些原理殃恒。晚上在想著怎么結(jié)合Vux + Virtual Dom實現(xiàn)一個名為WINV框架的時候懊纳,在探索WCC功能才發(fā)現(xiàn):自己又忽略掉了一個很重要的性能優(yōu)化細節(jié)蚓炬。這個WCC如果內(nèi)置在瀏覽器里掰读,就是可以實時的將DOM轉(zhuǎn)換為以JSON表示的DOM秘狞。

先將DOM轉(zhuǎn)換為Virtual Dom,再轉(zhuǎn)換回去的優(yōu)點是可以分離數(shù)據(jù)和樣式蹈集。這也就是為什么React的學習成本高的原因之一了烁试。

**Virtual Dom的表現(xiàn)形式
**
為了將真實的DOM轉(zhuǎn)換為Virtual DOM,我們需要將DOM以一定的形式保存下來拢肆,如MINA的:

<map longitude="23.099994" latitude="113.324520" markers="{{markers}}" covers="{{covers}}" style="width: 375px; height: 200px;"></map>
如:


這里寫圖片描述

又或者是React中的:


這里寫圖片描述

當然我們也可以自己實現(xiàn)一個比較簡單的DOM轉(zhuǎn)為Virtual DOM减响,如將


這里寫圖片描述

轉(zhuǎn)換為接近原生的:

這里寫圖片描述

**原生的Parser
**

我會假裝你已經(jīng)知道了瀏覽器相關的很多細節(jié),我也假裝我已經(jīng)對這些細節(jié)很清晰善榛。下圖一份Webkit瀏覽器的早期架構圖:

如果我們使用JS實現(xiàn)一個將WXML將換為DOM JSON,我們就需要間接通過JavaScript Engine(即JSCore )來轉(zhuǎn)換這個JSON文件呻畸。當有大量的DOM的時候移盆,這就不是一件輕松的事了。所以伤为,在WCC的生成代碼里對DOM的數(shù)量限制為16000
咒循。

我們可以用原生的接口來將WX DOM轉(zhuǎn)換為JSON据途,但是我們沒有辦法用原生的接口來將DOM JSON轉(zhuǎn)換DOM——畢竟我們還有大量的數(shù)據(jù)和綁定函數(shù)。

而這一點對于混合應用來說叙甸,就特別有幫助:

如果這個插件可以用在Cordova****上颖医,那么它將改善混合應用的性能。

**數(shù)據(jù)綁定
**
當我們觸發(fā)了generateFunc方法的時候:


這里寫圖片描述

我們調(diào)用下面的方法去初始化我們的DOM裆蒸,并把數(shù)據(jù)傳輸進去:


這里寫圖片描述

函數(shù)綁定

MINA的函數(shù)綁定機制是由函數(shù)名來決定的熔萧,如:

這里寫圖片描述

對于其他類型的綁定則是:

這里寫圖片描述

PS:我突然就不想看這個if else經(jīng)過minify以后的代碼了,太惡心了僚祷。佛致。。

如辙谜,我們的wxml:

<map longitude="23.099994" latitude="113.324520" markers="{{markers}}" covers="{{covers}}" style="width: 375px; height: 200px;"></map>
我們的propKey是bindtap俺榆,我們的propValue是bindViewTap,隨后我們就會根據(jù)當前的函數(shù)名去創(chuàng)建相應的事件装哆。

Hello小程序將與您共同成長罐脊。微信號:130870319 QQ群:40726600

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜕琴,隨后出現(xiàn)的幾起案子萍桌,更是在濱河造成了極大的恐慌,老刑警劉巖奸绷,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梗夸,死亡現(xiàn)場離奇詭異,居然都是意外死亡号醉,警方通過查閱死者的電腦和手機反症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔派,“玉大人铅碍,你說我怎么就攤上這事∠咭” “怎么了胞谈?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長憨愉。 經(jīng)常有香客問我烦绳,道長,這世上最難降的妖魔是什么配紫? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任径密,我火速辦了婚禮,結(jié)果婚禮上躺孝,老公的妹妹穿的比我還像新娘享扔。我一直安慰自己底桂,他們只是感情好,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布惧眠。 她就那樣靜靜地躺著籽懦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氛魁。 梳的紋絲不亂的頭發(fā)上暮顺,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機與錄音呆盖,去河邊找鬼拖云。 笑死,一個胖子當著我的面吹牛应又,可吹牛的內(nèi)容都是我干的宙项。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼株扛,長吁一口氣:“原來是場噩夢啊……” “哼尤筐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洞就,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤盆繁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旬蟋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體油昂,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藕赞。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡草慧,死狀恐怖准颓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布挑庶,位于F島的核電站,受9級特大地震影響软能,放射性物質(zhì)發(fā)生泄漏迎捺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一查排、第九天 我趴在偏房一處隱蔽的房頂上張望凳枝。 院中可真熱鬧,春花似錦雹嗦、人聲如沸范舀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锭环。三九已至,卻和暖如春泊藕,著一層夾襖步出監(jiān)牢的瞬間辅辩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工娃圆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玫锋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓讼呢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悦屏。 傳聞我的和親對象是個殘疾皇子节沦,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容