在之前的幾篇文章里鸡典,我們討論了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