在大前端技術(shù)領(lǐng)域,當(dāng)我們遇到了需要解決重復(fù)性的問題時(shí),通常會(huì)考慮設(shè)計(jì)一個(gè)DSL(Domain-Specific Language)或者抽象出一個(gè)框架層,專門來解決這些類似的問題。使用DSL我們并不需要為特定終端編寫多套代碼,還可以利用宿主語言的抽象能力,確保各終端渲染效果的一致性以及對(duì)開發(fā)者友好。
目前流行DSL有:React支持的JSX語法、Vue定義的SFC結(jié)構(gòu)和v-*指令集、微信小程序的WXML/WXS語法等。這些DSL最終被編譯為目標(biāo)代碼,直接發(fā)布于小程序平臺(tái),或者借助JS-Runtime運(yùn)行于APP和Web瀏覽器。
其中,React是函數(shù)式編程思想的實(shí)踐者,最大的特點(diǎn)是發(fā)明了JSX語法,允許開發(fā)者使用xml的方式在JS中聲明UI,并通過組件化和更加語義化的代碼而非模板來高效的定義界面,以提供最大的靈活性和響應(yīng)能力;React只對(duì)開發(fā)者暴露基礎(chǔ)的生命周期和過程,更多的實(shí)現(xiàn)和邏輯細(xì)節(jié)則交由用戶靈活定制,單純的使用JS語言即可完成整個(gè)開發(fā)過程,有客戶端開發(fā)經(jīng)驗(yàn)的開發(fā)者將更容易上手React。
而Vue則希望通過盡可能簡單的API實(shí)現(xiàn)響應(yīng)式的數(shù)據(jù)綁定和UI組件的組合及管理,因此默認(rèn)屏蔽了非常多的操作細(xì)節(jié),這對(duì)初學(xué)者而言提供了巨大的方便;其單文件組件模板語法也更貼近原生HTML5,具備Web前端基礎(chǔ)的開發(fā)者,將能夠流暢的過渡到Vue開發(fā)中。
二者的共同設(shè)計(jì)思想是虛擬DOM以及數(shù)據(jù)驅(qū)動(dòng)視圖更新,設(shè)計(jì)目的都是為了降低Web開發(fā)的復(fù)雜度,提升編碼體驗(yàn)以及開發(fā)和維護(hù)效率,讓開發(fā)者聚焦在業(yè)務(wù)上。
隨著移動(dòng)互聯(lián)網(wǎng)的迅猛發(fā)展,前端技術(shù)的范疇已經(jīng)從Web前端擴(kuò)展到移動(dòng)端H5、Android& iOS App、小程序等多端,業(yè)務(wù)重心也轉(zhuǎn)移到移動(dòng)端。而經(jīng)過多年發(fā)展的React和Vue已經(jīng)變得臃腫,難以適應(yīng)多端背景下,更個(gè)性化和深入下層的應(yīng)用場景,我們迫切需要從已有的技術(shù)中提取精華,構(gòu)建出更簡單輕巧,能夠?qū)Σ煌说奶匦詫?shí)現(xiàn)針對(duì)性優(yōu)化和處理的能力。
AVM.js能力一覽
AVM(Application-View-Model)是YonBuilder移動(dòng)端低代碼開發(fā)平臺(tái)(APICloud)基于標(biāo)準(zhǔn)H5子集設(shè)計(jì)的DSL中間語言編程框架,其可具備如下能力:
● Virtual DOM:通過虛擬DOM,渲染到不同終端,充分尊重系統(tǒng)特性,為不同終端執(zhí)行差異處理,實(shí)現(xiàn)高效渲染;
● 組件化:高可重用性、可組合性、可維護(hù)性的架構(gòu)設(shè)計(jì),隱藏了復(fù)雜的DOM結(jié)構(gòu)和行為,讓開發(fā)者專注于應(yīng)用的功能和外觀;
● 數(shù)據(jù)綁定:輕松將數(shù)據(jù)源綁定到應(yīng)用用戶界面,降低邏輯復(fù)雜性和開發(fā)難度;
● 狀態(tài)管理和路由:有效分離用戶界面和數(shù)據(jù)處理,實(shí)現(xiàn)項(xiàng)目的工程化管理;
● 類Vue語法和兼容React JSX,兼具Vue的輕巧和React的靈活性。
APICloud DSL最終可編譯為標(biāo)準(zhǔn)JS,通過DeepEngine渲染到app端和Web端,或者編譯為微信小程序代碼,用于微信小程序平臺(tái)發(fā)布。
APICloud DSL使用Vue方式定義組件或頁面:
APICloud DSL使用兼容React JSX方式定義組件或頁面: