作者:51CTO講師李寧
文章源自:http://androidguy.blog.51cto.com/974126/1836109
不管是互聯(lián)網(wǎng)公司,或是傳統(tǒng)的軟件公司便瑟,以及非IT企業(yè)缆毁,大多都需要開發(fā)各種類型的程序,包括移動(dòng)App(主要是Android和iOS)到涂、Web程序脊框、服務(wù)端程序等。這些程序使用的開發(fā)技術(shù)都不盡相同践啄,如Android使用Java開發(fā)浇雹,iOS使用Objective-C或Swift開發(fā)、Web程序頁面使用JavaScript屿讽、HTML5昭灵、CSS等技術(shù),而服務(wù)端的選擇就更多了伐谈,如Java EE烂完、PHP、Python诵棵、Ruby抠蚣、Node.js等。理論上非春,每一類的程序需要不同的開發(fā)小組完成柱徙,如Android開發(fā)小組、iOS開發(fā)小組奇昙,服務(wù)端開發(fā)小組等。這對(duì)于大公司沒什么問題敌完,反正錢多储耐。不過對(duì)于大多數(shù)創(chuàng)業(yè)公司來說,可能是一筆不小的負(fù)擔(dān)滨溉。
為了解決這個(gè)問題什湘,現(xiàn)在出現(xiàn)了很多跨平臺(tái)技術(shù)长赞,包括基于HTML5的混合開發(fā)、C++跨平臺(tái)解決方案等闽撤。不過這些也僅僅是跨平臺(tái)得哆。頂多解決了Android和iOS之間代碼最大限度共享的問題(仍然有一部分無法共享的代碼需要單獨(dú)編寫),而服務(wù)端仍然要我們使用其他技術(shù)開發(fā)哟旗,如Java EE贩据。不過自從有了Node.js以后,JavaScript就成為了服務(wù)端的開發(fā)語言闸餐,而且有了React.js饱亮,系統(tǒng)會(huì)將JSX代碼(在后面介紹)自動(dòng)轉(zhuǎn)換Web頁面的DOM元素。這樣舍沙,JavaScript+JSX近上,連同Web+服務(wù)端一起搞定了,不過好像還少了點(diǎn)什么拂铡,對(duì)壹无,移動(dòng)端(Android和iOS),這就是本文要講的主題:React Native感帅,下面會(huì)詳細(xì)介紹一下React Native格遭,以及用于設(shè)計(jì)UI的JSX。
React Native是Facebook 在 React.js Conf 2015 大會(huì)上推出的一個(gè)用于開發(fā)Android和iOS App的一個(gè)框架留瞳。主要編程語言是JavaScript拒迅,UI使用JSX(一種語法類似于XML的UI描述語言)。
ReactNative和React.js有什么區(qū)別呢她倘?
任何一種跨平臺(tái)框架都有兩部分:UI和邏輯璧微。對(duì)于這兩種技術(shù)來說,UI都使用的是JSX硬梁,而邏輯都是用了JavaScript前硫。
React Native和React.js的主要區(qū)別還是JSX。不管是React Native荧止,還是React.js屹电,在UI上都有一種技術(shù):虛擬DOM(Virtual DOM)
什么是VirtualDOM呢?
其實(shí)JSX只是一種語法糖跃巡。Web通過DOM管理Element危号。而DOM的效率是很低的,為了提高DOM的效率素邪,React.js提供了VirtualDOM外莲,這項(xiàng)技術(shù)的工作是完全在內(nèi)存中完成的,而且是增量修改DOM樹,所以效率非常高偷线。
對(duì)于Web來說磨确,實(shí)際渲染時(shí),仍然需要DOM声邦,所以在最終渲染是乏奥,VirtualDOM仍然要轉(zhuǎn)換成實(shí)際的DOM。而對(duì)于Android和iOS亥曹,就沒有DOM的概念的邓了,UI完全是本地控件實(shí)現(xiàn)的,如Android中的TextView歇式、EditText等驶悟。所以React Native就應(yīng)運(yùn)而生。如果說React.js在運(yùn)行時(shí)將Virtual DOM映射成了DOM材失,那么React Native就是在運(yùn)行時(shí)將Virtual DOM映射成Android和iOS的本地控件痕鳍。
從這一點(diǎn)可以看出,React.js用于Web開發(fā)龙巨,而ReactNative用于開發(fā)Android和iOS App笼呆,他們都將UI抽象成了Virtual DOM,只是在實(shí)際運(yùn)行時(shí)旨别,前者將Virtual DOM映射成了DOM诗赌,后者將Virtual DOM映射成了Android和iOS的本地控件。
由于ReactNative的UI仍然使用Android和iOS的本地控件秸弛,所以在UI渲染上已經(jīng)非常接近Native App了铭若。盡管業(yè)務(wù)邏輯代碼使用JavaScript,但由于JavaScript是即時(shí)編譯的递览,也就是第一次運(yùn)行時(shí)會(huì)將JavaScript代碼編譯成二進(jìn)制叼屠,所以JavaScript的運(yùn)行效率比較高。因此绞铃,React Native的運(yùn)行效率要比基于HTML5镜雨、CSS等技術(shù)的PhoneGap、AppCan高很多儿捧,因?yàn)檫@些技術(shù)直接用HTML5進(jìn)行渲染荚坞,而HTML5會(huì)大量使用DOM技術(shù),DOM在PC端的Web中也不算快菲盾,在移動(dòng)端就更慢了颓影。
總結(jié)
基于ReactNative的App在運(yùn)行效率上接近Native App,而且還擁有混合開發(fā)模式的兩個(gè)優(yōu)點(diǎn):熱更新(無需重新編譯上傳App即可更新亿汞,而且還不用通過App Store審核)和跨平臺(tái)(降低了學(xué)習(xí)成本瞭空,使用同樣的技術(shù)開發(fā)Android和iOS App)。
OK疗我,現(xiàn)在已經(jīng)了解了React Native咆畏,是不是打算學(xué)一下呢!移動(dòng)吴裤、Web和服務(wù)端使用同一種技術(shù)即可解決旧找,盡管都需要進(jìn)行開發(fā),但技術(shù)是通用的麦牺,也就是說只要招JavaScript程序員钮蛛,就可以同時(shí)解決移動(dòng)、Web和服務(wù)端的問題剖膳,使用一個(gè)開發(fā)小組即可解決所有問題魏颓,也無需再招聘Java、OC吱晒、Java EE甸饱、PHP程序員了,這樣會(huì)給創(chuàng)業(yè)公司節(jié)省了大量的開支仑濒。
覺得本文不錯(cuò)的朋友叹话,不要忘記來點(diǎn)贊、分享哦墩瞳。