Angular 2的架構(gòu)讓它有可能使用多種渲染引擎來(lái)渲染應(yīng)用,其中包括React Native。
為Angular 2的基礎(chǔ)架構(gòu)做出的決定中有一個(gè)是將框架分為兩個(gè)層級(jí):一層是核心,其處理組件,指令,過(guò)濾器,服務(wù),路由,修改檢查,DI和 I18n;另一層是渲染引擎,其處理DOM,CSS,動(dòng)畫(huà),模板,web組件,自定義事件等等。核心可以在獨(dú)立的進(jìn)程中執(zhí)行,這樣就將其從界面中解耦出來(lái),而且在核心有很多的任務(wù)要處理時(shí),這樣可以讓界面的響應(yīng)更快。關(guān)于這個(gè)決定的詳細(xì)內(nèi)容可以在Angular 2渲染架構(gòu)文檔中找到。
傳統(tǒng)上渲染一個(gè)Angular.JS應(yīng)用是通過(guò)DOM在瀏覽器中完成的,但是現(xiàn)在有可能通過(guò)其他的渲染引擎來(lái)渲染應(yīng)用,包括桌面的或者移動(dòng)端的原生渲染引擎,甚至還有服務(wù)器端。Angular 2渲染一文中更加仔細(xì)地解釋了如何使用不同的渲染引擎來(lái)完成此工作。
從主應(yīng)用中將渲染獨(dú)立出來(lái)有多種益處。據(jù)Google的工程師主管Brad Green說(shuō),Angular 2應(yīng)用可以運(yùn)行在Node.js上,而且速度相當(dāng)快。“你可以在此環(huán)境下運(yùn)行Photoshop,所以為何不呢?”,Node.js提供了文件系統(tǒng),進(jìn)程和硬件所需的入口。而且,Angular 2可以通過(guò)Angular Electron運(yùn)行在桌面上,或者在微軟的UWP上。
在移動(dòng)設(shè)備端,Angular 2提供了一些選擇項(xiàng)比如Ionic 2,NativeScript或者React Native。對(duì)于最后一個(gè),有個(gè)庫(kù)使得用React Native渲染Angular 2應(yīng)用變得有可能。開(kāi)發(fā)者可以調(diào)用所有React Native提供的API和polyfill來(lái)使用iOS和Android的原生功能,然后回調(diào)可以按需在Angular Zone中執(zhí)行。據(jù)Marc Laval所說(shuō),原生移動(dòng)開(kāi)發(fā)和web開(kāi)發(fā)很類似,除了是使用不同的組件而不是HTML和CSS提供的那些:
通用組件:Image,Picker,RefreshControl,ScrollView,Switch,Text,TextInput,View,WebView
Android特定組件:DrawerLayout,PagerLayout,ProgressBar, Toolbar
iOS特定組件:ActivityIndicator,DatePicker,MapView,Navigator,ProgressView,SegmentedControl,Slider,TabBar
應(yīng)用風(fēng)格是按照React Native的風(fēng)格,手勢(shì)是由Hammer.js處理的。Laval在下圖中詳細(xì)說(shuō)明了一個(gè)React Native + Angular 2應(yīng)用的架構(gòu):
他解釋說(shuō):
技術(shù)上來(lái)說(shuō),一個(gè)React Native應(yīng)用運(yùn)行了三個(gè)線程。主要的一個(gè)是JS線程,在這里所有的JS代碼可以被執(zhí)行;它控制了整個(gè)應(yīng)用。其它兩個(gè)線程運(yùn)行著應(yīng)用的原生的部分:標(biāo)準(zhǔn)主UI線程,和一個(gè)“shadow”線程用來(lái)測(cè)量和布局。
原生和JS這兩塊通過(guò)一個(gè)橋雙向通信。這意味著有Bridge JS API來(lái)獲取原生的功能特性(網(wǎng)絡(luò),地理位置,剪貼板等等)而且可以操作原生的元素,然后原生的事件被傳回到JS模塊。
在不久的將來(lái),Angular 2的團(tuán)隊(duì)計(jì)劃創(chuàng)建一個(gè)新的動(dòng)畫(huà)模塊,而React Native的團(tuán)隊(duì)打算在原生端獲得更優(yōu)的性能,而且Facebook會(huì)支持UWP。