0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

React Native重構(gòu)即將完成,改善版本有何不同?

如意 ? 來(lái)源:百家號(hào) ? 作者: 讀芯術(shù) ? 2020-07-01 14:43 ? 次閱讀

2015年,React Native被首次推出,使用ReactJS框架開(kāi)發(fā)原生跨平臺(tái)應(yīng)用程序。該框架獲得了社區(qū)的大力支持,并憑借其Web同行的名聲逐漸普及,但其實(shí)該平臺(tái)的原始設(shè)計(jì)并非沒(méi)有缺點(diǎn)。

2018年,F(xiàn)acebook團(tuán)隊(duì)宣布他們正試圖解決多年來(lái)開(kāi)發(fā)人員遇到的這些最常見(jiàn)問(wèn)題,進(jìn)行ReactNative重構(gòu)。這樣的重構(gòu)改善體現(xiàn)在哪些方面呢?本文將從性能和開(kāi)發(fā)速度方面來(lái)談一談。

原構(gòu)造

ReactNative曾被稱(chēng)作“不依賴(lài)于平臺(tái)”的應(yīng)用框架。從某種程度上講,該框架的主要目標(biāo)是讓開(kāi)發(fā)人員編寫(xiě)Javascript React代碼,而React Native可以在幕后部署其機(jī)制,以將Reactreconciliation tree轉(zhuǎn)錄成可由原生基礎(chǔ)設(shè)施解釋的內(nèi)容。它能夠:

· 正確顯示UI

· 訪(fǎng)問(wèn)原生功能

通常,Android/ iOS生態(tài)系統(tǒng)目前的機(jī)制如下所示:

每個(gè)React Native應(yīng)用程序中運(yùn)行著3個(gè)并行線(xiàn)程:

· 陰影線(xiàn)程用來(lái)設(shè)計(jì)布局。它使用Facebook自帶的Yoga布局引擎來(lái)設(shè)計(jì)flexbox布局并將其發(fā)送回UI線(xiàn)程。

· JS線(xiàn)程讀取和編譯所有JavaScript代碼以及執(zhí)行應(yīng)用程序大部分業(yè)務(wù)邏輯。將所有Javascript代碼融匯到一個(gè)文件中,并翻譯任何其他Javascript語(yǔ)法(例如JSX或TS),然后將此代碼發(fā)送到JavaScriptCore引擎以便運(yùn)行。

· 原生線(xiàn)程是運(yùn)行原生代碼的位置。每當(dāng)需要更新UI或訪(fǎng)問(wèn)本機(jī)函數(shù)時(shí),它將與JS線(xiàn)程連接。它分為原生UI和原生模塊。原生模塊在啟動(dòng)時(shí)都處于預(yù)備狀態(tài),這意味著即使ReactNative使用藍(lán)牙模塊,該藍(lán)牙模塊也始終處于運(yùn)行狀態(tài)。

使用橋接器可以連接JS線(xiàn)程和原生線(xiàn)程,在后臺(tái),C++模塊圍繞一個(gè)異步隊(duì)列構(gòu)建。每當(dāng)它從任一方獲取數(shù)據(jù)時(shí),都會(huì)將數(shù)據(jù)序列化為字符串并將其通過(guò)隊(duì)列傳遞,并在到達(dá)時(shí)反序列化。

這意味著所有線(xiàn)程都依賴(lài)于跨網(wǎng)橋傳輸?shù)漠惒絁SON消息,并且這些消息發(fā)送到任一端,期望它們?cè)趯?lái)的某個(gè)時(shí)間引發(fā)響應(yīng),但它還存在擁塞的風(fēng)險(xiǎn)。

每當(dāng)瀏覽者在原生環(huán)境中拖動(dòng)滾動(dòng)條時(shí),信息都會(huì)異步發(fā)送到JavaScript領(lǐng)域,但是原生環(huán)境不會(huì)等待Java腳本執(zhí)行工作并將其以另一種方式發(fā)送回去。這會(huì)造成延遲,屏幕上出現(xiàn)信息之前會(huì)一片空白。

同樣,布局設(shè)計(jì)需要經(jīng)過(guò)很多次才能在屏幕上顯示,因?yàn)樵谠O(shè)計(jì)布局之前,它需要想盡辦法到達(dá)Yoga引擎,當(dāng)然這也意味著要通過(guò)橋接器??梢钥吹疆惒叫蛄谢瘉?lái)回發(fā)送JSON數(shù)據(jù)是怎樣造成性能問(wèn)題的,但是如何使JavaScript與本機(jī)通信呢?這就要靠JSI發(fā)揮作用了。

新架構(gòu)

重構(gòu)版的ReactNative將逐漸棄用橋接器,轉(zhuǎn)而采用新元素——JavaScript接口(JSI)。JSI的一些改進(jìn)令人驚喜,首先就是JS軟件包不再依賴(lài)JSC。換句話(huà)說(shuō),現(xiàn)在可以輕松地將JSC引擎與其他(可能更高性能的)JavaScript引擎互換,例如V8。

第二個(gè)改進(jìn)針對(duì)的是這種新架構(gòu)的基礎(chǔ):“通過(guò)使用JSI,JavaScript可以保存對(duì)C++主機(jī)對(duì)象的引用并對(duì)其調(diào)用方法。JavaScript和原生領(lǐng)域?qū)⒄嬲舜肆私狻!?/p>

這也意味著JSI將允許所有線(xiàn)程之間完全互操作。通過(guò)共享所有權(quán),JavaScript代碼可以直接從JS線(xiàn)程運(yùn)行原生方法,不需要將要傳遞的消息序列化為JSON,這消除了橋接器上的所有擁塞和異步問(wèn)題。

除了顯著改善不同線(xiàn)程之間的通信之外,這種新架構(gòu)還可以直接控制原生模塊。這意味著我們可以在需要時(shí)使用原生模塊,而不是在啟動(dòng)時(shí)將它們?nèi)恳龑?dǎo)一次。這大大提高了性能,節(jié)省了啟動(dòng)時(shí)間。

在掌握了C ++的強(qiáng)大功能的基礎(chǔ)上,懂得如何將React Native用于定位非常大的系統(tǒng)面板是很容易的。

推出這么多年,ReactNative已過(guò)時(shí)、待清理、需維護(hù)的部分已經(jīng)積攢很多了,React Native框架已經(jīng)清除了某些功能,諸如Webview或AsyncStorage之類(lèi)的模塊正逐漸從React Native核心中移出,將轉(zhuǎn)變?yōu)樯鐓^(qū)管理的存儲(chǔ)庫(kù)。

憑借新的精簡(jiǎn)核心模塊以及JavaScript代碼與原生代碼之間強(qiáng)大的互操作性機(jī)制,React Native重構(gòu)將實(shí)現(xiàn)許多性能改進(jìn)和更全方位的開(kāi)發(fā)人員工作流。它計(jì)劃在2020年第四季度之前完成全面重組,更好的性能和全新開(kāi)發(fā)體驗(yàn)十分令人期待。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 可重構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    9014
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    202

    瀏覽量

    21317
  • reactjs
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    4547
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Taro鴻蒙技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測(cè),本系列文章將深入解析 Taro 如何實(shí)現(xiàn)使用 React 開(kāi)發(fā)高性能鴻蒙應(yīng)用的技術(shù)內(nèi)幕。
    的頭像 發(fā)表于 10-25 17:24 ?70次閱讀
    Taro鴻蒙技術(shù)內(nèi)幕系列(一):如何將<b class='flag-5'>React</b>代碼跑在ArkUI上

    重構(gòu)改善既有代碼的設(shè)計(jì)」實(shí)戰(zhàn)篇

    背景 在軟件開(kāi)發(fā)的世界里,代碼重構(gòu)是提升項(xiàng)目質(zhì)量、適應(yīng)業(yè)務(wù)變化的關(guān)鍵步驟。最近,我重新翻閱了《重構(gòu)改善既有代碼的設(shè)計(jì) 第二版》,這本書(shū)不僅重新點(diǎn)燃了我對(duì)重構(gòu)的熱情,還深化了我的理解:
    的頭像 發(fā)表于 08-14 10:42 ?171次閱讀
    「<b class='flag-5'>重構(gòu)</b>:<b class='flag-5'>改善</b>既有代碼的設(shè)計(jì)」實(shí)戰(zhàn)篇

    Matter和Z-Wave何不同?它們的應(yīng)用哪些?

    Labs(亦稱(chēng)“芯科科技”)廣泛支持智能家居行業(yè)中較具潛力的兩種現(xiàn)有標(biāo)準(zhǔn):Matter 和 Z-Wave,并制作本篇博文幫助開(kāi)發(fā)人員了解這兩項(xiàng)標(biāo)準(zhǔn)的特性、它們之間何不同、它們對(duì)智能家居用戶(hù)和開(kāi)發(fā)人員的意義,以及對(duì)應(yīng)的解決方案和設(shè)計(jì)考量。
    的頭像 發(fā)表于 07-24 16:45 ?511次閱讀

    請(qǐng)問(wèn)IDF中的pthread和Task相比何不同?

    IDF中的 pthread 和 Task 相比何不同?
    發(fā)表于 06-24 06:46

    Verilog的版本哪些

    電子發(fā)燒友網(wǎng)站提供《Verilog的版本哪些.docx》資料免費(fèi)下載
    發(fā)表于 05-31 11:29 ?0次下載

    Traveo II B-H中的SECURE和SECURE_WITH_DEBUG生命周期階段何不同?

    Traveo II B-H 中的 SECURE 和 SECURE_WITH_DEBUG 生命周期階段何不同?
    發(fā)表于 05-21 07:07

    商湯科技即將推出日日新大模型5.0粵語(yǔ)版本

    在盛大的“新質(zhì)企業(yè)家聯(lián)合會(huì)”成立典禮上,商湯科技副總裁、智慧城市與商業(yè)事業(yè)群總裁張果琲宣布了一項(xiàng)重要消息。商湯科技即將推出日日新大模型5.0的粵語(yǔ)版本,這一新版本將基于大裝置和強(qiáng)大的技術(shù)能力,為粵語(yǔ)語(yǔ)言處理帶來(lái)顯著的提升。
    的頭像 發(fā)表于 05-13 10:58 ?523次閱讀

    實(shí)錘!騰訊終于擁抱鴻蒙生態(tài),微信鴻蒙原生版本即將上線(xiàn)

    系統(tǒng) 。甚至網(wǎng)友表示, 微信不適配鴻蒙系統(tǒng)我就卸載QQ ,用華為的暢連。其實(shí)不然,微信作為國(guó)民級(jí)社交軟件是肯定會(huì)適配鴻蒙系統(tǒng)的,至于適配的進(jìn)度則還需要時(shí)間。不過(guò)近日,消息稱(chēng)微信即將支持鴻蒙原生系統(tǒng)
    發(fā)表于 04-30 21:14

    鴻蒙OS開(kāi)發(fā)實(shí)例:【Native C++】

    使用DevEco Studio創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用Native C++模板,實(shí)現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫(kù)的功能。使用C標(biāo)準(zhǔn)庫(kù)hypot接口計(jì)算兩個(gè)給定數(shù)平方和的平方根。在輸入框中輸入兩個(gè)數(shù)字,點(diǎn)擊計(jì)算結(jié)果按鈕顯示計(jì)算后的數(shù)值。
    的頭像 發(fā)表于 04-14 11:43 ?2382次閱讀
    鴻蒙OS開(kāi)發(fā)實(shí)例:【<b class='flag-5'>Native</b> C++】

    異地組網(wǎng)與傳統(tǒng)網(wǎng)絡(luò)何不同?SD-WAN組網(wǎng)與傳統(tǒng)網(wǎng)絡(luò)何不同?

    異地組網(wǎng)與傳統(tǒng)網(wǎng)絡(luò)何不同?SD-WAN組網(wǎng)與傳統(tǒng)網(wǎng)絡(luò)何不同? 異地組網(wǎng)與傳統(tǒng)網(wǎng)絡(luò)不同之處 異地組網(wǎng)是一種網(wǎng)絡(luò)架構(gòu),可以將遠(yuǎn)程辦公地點(diǎn)、分支機(jī)構(gòu)和數(shù)據(jù)中心等多個(gè)地理位置的設(shè)備連接起來(lái)
    的頭像 發(fā)表于 03-27 16:57 ?500次閱讀

    院士稱(chēng)全球芯片產(chǎn)業(yè)格局即將重構(gòu)

    中國(guó)工程院院士鄔賀銓在大會(huì)上對(duì)RISC-V的發(fā)展給予了高度評(píng)價(jià)。他表示,RISC-V正進(jìn)入應(yīng)用爆發(fā)期,成為芯片指令集架構(gòu)的第三極,為全球芯片產(chǎn)業(yè)格局的重構(gòu)帶來(lái)了重大機(jī)遇。
    的頭像 發(fā)表于 03-14 15:41 ?5444次閱讀

    銅線(xiàn)和鋁線(xiàn)制作的變壓器何不同?

    銅線(xiàn)和鋁線(xiàn)制作的變壓器何不同? 銅線(xiàn)和鋁線(xiàn)制作的變壓器許多不同之處。雖然它們都是用于電力傳輸和轉(zhuǎn)換的重要元件,但兩者在導(dǎo)電性能、成本、重量和制造工藝等方面存在差異。下面將詳細(xì)介紹銅線(xiàn)和鋁線(xiàn)制作
    的頭像 發(fā)表于 02-02 09:36 ?3177次閱讀

    光纖和光纜何不同之處?

    很多人會(huì)有這樣的疑問(wèn),光纖和光纜何不同之處?主要是因?yàn)楣饫w和光纜這兩個(gè)名詞容易引起混淆。在嚴(yán)格的定義下,光纖和光纜是兩種不同的東西,然而在現(xiàn)實(shí)生活中,許多人仍然會(huì)混淆這兩者。為了更好地理解光纖和光纜之間的區(qū)別,我們一起來(lái)看一下。
    的頭像 發(fā)表于 01-15 17:01 ?739次閱讀

    噪音抑制與主動(dòng)降噪:何不同之處?

    噪音抑制與主動(dòng)降噪:何不同之處?
    的頭像 發(fā)表于 11-30 17:29 ?594次閱讀
    噪音抑制與主動(dòng)降噪:<b class='flag-5'>有</b><b class='flag-5'>何不</b>同之處?

    電源調(diào)制比揭秘:PSMR與PSRR何不

    電子發(fā)燒友網(wǎng)站提供《電源調(diào)制比揭秘:PSMR與PSRR何不同.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 16:50 ?0次下載
    電源調(diào)制比揭秘:PSMR與PSRR<b class='flag-5'>有</b><b class='flag-5'>何不</b>同