現(xiàn)在技術(shù)每天都在發(fā)展,開發(fā)框架和庫的新版本層出不窮,支持的功能也越來越多。目前最流行的一個(gè)是編程語言Kotlin,另一個(gè)是JS庫React Native。Kotlin是一種靜態(tài)類型的開源編程語言,是Android移動(dòng)應(yīng)用開發(fā)方面的一顆耀眼的新星。React Native是個(gè)JavsScript庫,可以用于創(chuàng)建Android、iOS和UWP上的原生應(yīng)用——所以是時(shí)候比較下哪個(gè)更好用了。
React Native是什么?
React Native是個(gè)JavsScript庫,是React家族的新一代成員,用于創(chuàng)建用戶界面。它由Facebook和社區(qū)共同開發(fā),最初是用在Instagram上。
它發(fā)布已經(jīng)五年了,最新的穩(wěn)定版發(fā)行于2017年11月28日。通過React Native,你可以創(chuàng)建Android、iOS和UWP上的原生應(yīng)用。React Native最大的好處是,用Objective-C或Java建立的應(yīng)用和React Native建立的應(yīng)用幾乎沒有區(qū)別——所以也可以用它代替Kotlin。
但就像任何語言一樣,React Native也有優(yōu)缺點(diǎn)。
React Native的優(yōu)點(diǎn)
高效率
如果能迅速看到做出的界面效果,那么設(shè)計(jì)和布局的效率就會(huì)更高。正因?yàn)槿绱耍琑eact Native有個(gè)非常好用的功能叫做“熱加載”,它能讓代碼中的改動(dòng)立刻反映到iOS和Android應(yīng)用中。就像預(yù)覽功能一樣!
這個(gè)功能可以將修改代碼后的等待時(shí)間降到零,也能節(jié)約開發(fā)時(shí)間。
性能
React Native使用原生的控件和模塊,這樣能提高性能。
React Native與iOS或Android的目標(biāo)(原生)組件交互,將代碼直接、獨(dú)立地渲染成原生API。這樣做使得它運(yùn)行在UI之外的另一個(gè)線程上,從而能提高性能。關(guān)鍵之處是,React使用原生API。像使用WebView渲染代碼等其他解決方案雖然可能有各自的優(yōu)點(diǎn),但都會(huì)犧牲性能。
不斷增長的社區(qū)
上面說過,React Native是個(gè)開源項(xiàng)目,也就是說任何人都可以為這個(gè)框架做貢獻(xiàn)。這也意味著你有更多的途徑獲得那些大牛程序員的經(jīng)驗(yàn),如果遇到任何問題,那么很有可能從社區(qū)和專家那里得到幫助。
現(xiàn)成的組件能提高開發(fā)速度
React Native的另一個(gè)強(qiáng)大的功能就是“現(xiàn)成的組件”。你不需要從頭自己寫組件,React Native已經(jīng)提供了一堆組件供你使用。這些組件非常適合制作各種簡單功能,這讓開發(fā)過程更簡單、更快。
省錢
React Native不僅能節(jié)省時(shí)間,還能省錢。
除了縮短開發(fā)過程之外(也是另一種React省錢的方式),React Native可以讓JavaScript開發(fā)者針對(duì)多個(gè)操作系統(tǒng)創(chuàng)建應(yīng)用,并把原生代碼的必要性降低到最小。
這種方法更便宜,更節(jié)省預(yù)算,因?yàn)椴恍枰獮椴煌哪繕?biāo)設(shè)備雇傭不同的開發(fā)者或開發(fā)團(tuán)隊(duì),一個(gè)開發(fā)者就能開發(fā)兩個(gè)平臺(tái)。也就是說,在一個(gè)應(yīng)用上投入更少的資源和成本,同時(shí)縮短開發(fā)進(jìn)程。
更小型的團(tuán)隊(duì)
在上一條的基礎(chǔ)上,如果一個(gè)開發(fā)者能同時(shí)開發(fā)iOS和Android,那么就能實(shí)際上減小團(tuán)隊(duì)的大小。除了不需要學(xué)習(xí)兩種不同的語言之外,它也能讓團(tuán)隊(duì)小型化。
與Android、iOS各一個(gè)團(tuán)隊(duì)相比,只擁有一個(gè)React Native團(tuán)隊(duì)可以促進(jìn)更好的溝通。選擇React Native,最大的需求就是一個(gè)好的JavaScript開發(fā)者,它就能同時(shí)為兩個(gè)平臺(tái)(iOS和Android)編寫代碼。
的確有一些情況下,那些需要更多原生功能的應(yīng)用會(huì)用到原生開發(fā)者的幫助,但大多數(shù)情況下,一個(gè)小團(tuán)隊(duì)就夠了。小團(tuán)隊(duì)管理起來更容易。
可靠、穩(wěn)定的應(yīng)用
用React Native創(chuàng)建的應(yīng)用無需擔(dān)心它的穩(wěn)定性和可靠性。它的數(shù)據(jù)綁定非常簡單,其數(shù)據(jù)流禁止子元素影響到父元素的數(shù)據(jù)。如果開發(fā)者想要改變?nèi)魏螌?duì)象,他必須修改對(duì)象的狀態(tài),并相應(yīng)地進(jìn)行更新,也就是說只有允許改變的組件才會(huì)被更新。像Facebook、Instagram、Airbnb、Skype和許多大公司都在使用React Native!這件事本身就說明React Native創(chuàng)建的應(yīng)用質(zhì)量、可靠性和穩(wěn)定性都很好。
支持多個(gè)操作系統(tǒng),只需少量原生代碼
讓一個(gè)應(yīng)用在多個(gè)操作系統(tǒng)上運(yùn)行的功能非常好。先不說這樣做的簡單性,因?yàn)槟憧赡懿⒉粫?huì)用到React Native的所有高級(jí)特性,至少你只需寫一個(gè)應(yīng)用就能得到兩個(gè)。
我認(rèn)為這必須是React Native的好處之一。
比混合原生應(yīng)用更好
React Native是真正的原生應(yīng)用,而不像其他混合工具,它們只是提供一個(gè)原生的殼,里面還是基于瀏覽器的應(yīng)用而已。由于React Native使用的是原生控件,最終產(chǎn)品的外觀會(huì)非常真實(shí),就像是真正使用原生技術(shù)創(chuàng)建的一樣。如果你不知道某個(gè)應(yīng)用是用什么技術(shù)構(gòu)建的,你就完全沒辦法分辨出一個(gè)應(yīng)用是用React Native構(gòu)建,還是用Android或iOS自己的語言構(gòu)建。
React Native的缺點(diǎn)
現(xiàn)成控件的小集合
現(xiàn)成控件是React Native最重要的優(yōu)點(diǎn)之一。
但很可惜它只包含少量的幾個(gè)控件。它仍是個(gè)非常新的開發(fā)框架,盡管現(xiàn)成控件的數(shù)量以后會(huì)有大幅度增加,但目前控件的數(shù)量還非常少。因此開發(fā)者只能用它創(chuàng)建非常簡單的應(yīng)用。
需要原生代碼
本文前面提到過,在使用React Native開發(fā)時(shí)可能依然需要少量的原生代碼。這似乎有些矛盾,因?yàn)閷?duì)于使用React Native開發(fā)的人來說,選擇React Native的最初目的可能就是避免編寫Android或iOS的代碼。因此這一部分也必須留出預(yù)算,特別是當(dāng)應(yīng)用需要訪問設(shè)備的攝像頭或其他板載硬件的時(shí)候。極少數(shù)情況下,這些原生代碼的工作量甚至?xí)eact Native帶來的好處,如小型團(tuán)隊(duì)、節(jié)省時(shí)間、節(jié)約成本等。
應(yīng)用程序性能不如純粹的原生應(yīng)用
如果只是個(gè)小應(yīng)用,那完全沒問題,你能享受到所有React Native的好處。但如果需要高級(jí)功能,那么性能就比不上為各個(gè)平臺(tái)專門創(chuàng)建的應(yīng)用了。
組件質(zhì)量
前面說過為數(shù)不多的一些現(xiàn)成組件。但這并不是死胡同,因?yàn)檫€有各種第三方組件庫可供選擇。但第三方組件的質(zhì)量和可靠性就得憑運(yùn)氣了。由于這些組件不是官方開發(fā)的,它們可能會(huì)包含大量的bug和小問題。改正這些問題可能會(huì)花費(fèi)大量的時(shí)間,可能自己從頭開始寫一個(gè)還更省時(shí)間,這再次抹殺了React Native跨平臺(tái)的優(yōu)勢。
陡峭的學(xué)習(xí)曲線
如果你不熟悉React框架和JavaScript,那么學(xué)習(xí)React Native可能會(huì)有點(diǎn)困難,特別是與其他跨平臺(tái)開發(fā)方式相比。JSX是個(gè)JavaScript語法擴(kuò)展,可以在JavaScript中混合HTML。這對(duì)于一般人來說并不好理解,因此它的學(xué)習(xí)曲線很陡峭,會(huì)打擊學(xué)習(xí)的積極性。
JavaScript基礎(chǔ)庫導(dǎo)致的低安全性
我們知道React Native是個(gè)JavaScript庫。如果你想在需要極高安全性的應(yīng)用上使用React Native,如銀行移動(dòng)應(yīng)用或個(gè)人財(cái)務(wù)引用,就需要格外注意細(xì)節(jié)問題,因?yàn)镴avaScript的脆弱性廣為人知。必須非常小心那些可能會(huì)對(duì)應(yīng)用的核心功能造成傷害的惡意代碼。
特別是在使用任何第三方擴(kuò)展的時(shí)候。
內(nèi)存管理
同樣,由于React Native是基于JavaScript的,它并不適合需要大量計(jì)算的應(yīng)用。從內(nèi)存使用和管理的角度來看,應(yīng)用的性能和速度會(huì)降低,而且浮點(diǎn)數(shù)計(jì)算的處理更沒有效率。
與React Native對(duì)比,我們來看看Kotlin的優(yōu)缺點(diǎn)。
Kotlin是什么?
Kotlin是Google為Java虛擬機(jī)創(chuàng)造的編程語言,由Google提供支持,JetBrains負(fù)責(zé)開發(fā)。這種語言非常高效,而且為Android開發(fā)者面臨的各種問題提供多種解決方案。Kotlin是一種靜態(tài)類型的開源編程語言,非常適合服務(wù)器端Web應(yīng)用開發(fā)。它能減少bug,提高代碼可讀性,縮短開發(fā)時(shí)間,是Android移動(dòng)應(yīng)用開發(fā)方面的一顆耀眼的新星。
由于它還很新,許多人還不信任它的社區(qū)支持情況,但JetBrains(Kotlin的開發(fā)者)的官方文檔非常完善,而且結(jié)構(gòu)清晰。因此任何人都很容易學(xué)習(xí)Kotlin。
但Kotlin是否能比React Native更好?我們來看看。
Kotlin的優(yōu)點(diǎn)
易維護(hù)性
Kotlin由JetBrains支持,而JetBrains正是最好的IDE的開發(fā)者。因此JetBrains不可能會(huì)放棄對(duì)Kotlin的支持。而且,Kotlin已經(jīng)被多種開發(fā)環(huán)境支持,包括Andorid Studio。因此如果你選擇Kotlin,就等于選擇了可能在未來被多種工具和IDE支持的巨人。
更少的代碼
考慮下編寫代碼。像寫任何其他東西一樣,一條鐵律就是“寫得越少,犯錯(cuò)越少”。Kotlin的代碼不僅非常精確,而且非常清晰。這樣犯錯(cuò)誤的可能性就更小,從而帶來更穩(wěn)定的產(chǎn)品代碼。只需寫少量代碼就能達(dá)到相同的功能。
可讀性
Kotlin是一門成熟的語言,它最初出現(xiàn)于2011年,在最終發(fā)布之前已經(jīng)經(jīng)歷了多個(gè)測試階段。它是由程序員開發(fā)的編程語言,而它的開發(fā)者們已經(jīng)為開發(fā)者們解決了很多問題。他們?cè)谧钚碌陌姹局薪鉀Q的問題之一,就是他們讓最新版本與前面的所有版本兼容。在Android上要想兼容所有舊版本是我遇到的最痛苦的問題,所以相信我,Kotlin值得信賴。
兼容現(xiàn)有代碼
Kotlin與Java的互操作性是我推薦Kotlin的另一個(gè)理由。Kotlin能與Java合作得非常好,包括所有相關(guān)的工具和框架,從而提供了非常豐富的生態(tài)系統(tǒng)。
那這與Kotlin和React Native的比較有什么關(guān)系?
對(duì)于初學(xué)者而言,Java學(xué)習(xí)資料和在線幫助非常豐富。任何用Kotlin做不到的事情都可以用Java實(shí)現(xiàn)。有人說這是個(gè)新的學(xué)習(xí)曲線,而我認(rèn)為這是個(gè)Kotlin建立偉大的開發(fā)者社區(qū)的絕佳機(jī)會(huì)。
為什么?因?yàn)橄矚gJava的人可以沒有任何難度地遷移到Kotlin,從而為Kotlin社區(qū)做出貢獻(xiàn)。由于Java和Kotlin代碼有互操作性,你總會(huì)找到解決辦法。
而React Native就沒有這么幸運(yùn)了。
Kotlin的缺點(diǎn)
團(tuán)隊(duì)培訓(xùn)
對(duì)于不熟悉Java的人(許多人認(rèn)為自己熟悉,但其實(shí)并沒有),我覺得Kotlin是個(gè)缺點(diǎn)。畢竟Kotlin和Java之間有一些區(qū)別,因此對(duì)于他們來說還是有學(xué)習(xí)曲線的。這些開發(fā)者會(huì)對(duì)切換語言有一種抵抗。我能預(yù)見到,必須在培訓(xùn)上投入成本,并投入更多時(shí)間讓Android開發(fā)團(tuán)隊(duì)能切換到Kotlin。
編譯速度慢
一些開發(fā)者報(bào)告說,Kotlin的一大缺點(diǎn)就是編譯速度太慢。有時(shí)候,Kotlin的編譯速度并不慢,但有時(shí)候卻非常慢。
較小的社區(qū)
盡管Kotlin潛力很大,盡管它在迅速成長為強(qiáng)大的語言,目前它的開發(fā)者社區(qū)還非常小。這就是說學(xué)習(xí)Kotlin的資料很少,會(huì)有很多問題無人回答,即使是對(duì)于熟悉Java的人來說。
結(jié)論
使用React Native對(duì)于適合它的項(xiàng)目非常容易,但我認(rèn)為,它畢竟是個(gè)JavaScript庫,盡管非常好用、非常耀眼。但作為一門語言,依然無法超越Kotlin。
你認(rèn)為如何?你認(rèn)為Kotlin和React Native哪個(gè)更好?歡迎在評(píng)論中討論。
聯(lián)系客服