成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這波React屬實(shí)被針對(duì)了

開(kāi)發(fā) 前端
雖然看起來(lái)Solid.js對(duì)比React在框架的某些方面是有優(yōu)勢(shì)的,但并不能撼動(dòng)React的統(tǒng)治地位。畢竟,React這么流行和他快不快一點(diǎn)關(guān)系都沒(méi)有,社區(qū)生態(tài)繁榮才是最重要的。

[[429677]]

大家好,我卡頌。

昨天在網(wǎng)上愉快沖浪時(shí),看到一篇框架測(cè)評(píng),效果屬實(shí)爆炸。

作者用React和Solid.js開(kāi)發(fā)了同樣的Demo。為什么用Solid.js和React對(duì)比呢,讓我們看看Solid.js的API:

  • Hooks
  • Context、Portal API
  • Error Boundaries

不能說(shuō)和React多雷同,只能說(shuō)一摸一樣吧。而且Solid.js也用JSX描述視圖,所以一個(gè)React應(yīng)用要改為Solid.js應(yīng)用的成本很小。

具體測(cè)評(píng)結(jié)果怎么樣呢,差了快3倍,這一波React屬實(shí)被針對(duì)了。

本文參考SolidJS vs React: I've Built the Same App On Both Libraries.[1]

為啥差這么多簡(jiǎn)單介紹下這個(gè)Demo,初始渲染空白列表:

首次mount完成后發(fā)起請(qǐng)求,渲染列表數(shù)據(jù):

Rick和Morty真愛(ài)粉無(wú)疑了

這是兩個(gè)應(yīng)用Chrome Dev Tools Performance面板的結(jié)果:

左React 右Solid.js

解釋下其中幾個(gè)關(guān)鍵指標(biāo):

  • Loading:發(fā)起網(wǎng)絡(luò)請(qǐng)求、解析HTML的時(shí)間
  • Scripting:解析、編譯、執(zhí)行JS的時(shí)間(包括垃圾回收時(shí)間)
  • Rendering:style和layout計(jì)算
  • Painting:paint、composite、解碼圖片

具體關(guān)注Scripting,左475ms(React),右176ms(Solid.js)

2倍多的差距,這么夸張?

問(wèn)題出在哪

前端框架的工作流程可以簡(jiǎn)單用三個(gè)步驟總結(jié):

  1. 觸發(fā)交互
  2. 計(jì)算交互會(huì)影響哪些DOM
  3. 執(zhí)行DOM操作

這里的交互可能是首屏渲染,可能是點(diǎn)擊造成的狀態(tài)變化、可能是請(qǐng)求數(shù)據(jù)......

在React中,步驟2是在運(yùn)行時(shí)完成的,而在Solid.js中是在編譯時(shí)完成的。

具體來(lái)說(shuō),該步驟在React中被稱為reconcile,更普遍的稱呼是虛擬DOM的diff算法。

在Performance面板下面的Call Tree中可以看到,執(zhí)行XHR Load(請(qǐng)求列表數(shù)據(jù))前有個(gè)很耗時(shí)的操作(Function Call),該操作即reconcile。

而在Solid.js應(yīng)用中就沒(méi)有這個(gè)耗時(shí)的操作:

在編譯時(shí),Solid.js會(huì)將JSX直接編譯為狀態(tài)與操作DOM的方法之間的聯(lián)系。

由于JSX太過(guò)靈活,為了在編譯時(shí)有更多線索建立這種聯(lián)系,Solid.js在React原有JSX組件基礎(chǔ)上提供了一些控制流組件:

舉個(gè)例子,下面是遍歷列表項(xiàng)在兩個(gè)框架中的實(shí)現(xiàn)區(qū)別:

  1. // React 
  2. <ul> 
  3.   {list.map( 
  4.     item => <li>{item.name}</li> 
  5.   )} 
  6. </ul> 
  7. <ul> 
  8.    
  9. // Solid.js 
  10. <ul> 
  11.   <For each={list}> 
  12.     {(item) => <li>{item.name}</li>} 
  13.   </For>   
  14. </ul> 

For組件替代了JS中的數(shù)組map方法。

當(dāng)Solid.js在編譯時(shí)完成這些工作,在運(yùn)行時(shí)每次更新實(shí)際只用完成步驟1和3,省去了大部分步驟2的時(shí)間。

雖然React對(duì)reconcile有優(yōu)化策略,但隨著應(yīng)用體積增大,或者項(xiàng)目成員不完全遵守最佳實(shí)踐,勢(shì)必會(huì)造成在步驟2上花費(fèi)的時(shí)間越來(lái)越多。

Solid.js提前建立狀態(tài)與操作DOM的方法之間的聯(lián)系,雖然需要在運(yùn)行時(shí)占用更多內(nèi)存保存這種對(duì)應(yīng)關(guān)系,但是卻省去了大部分步驟2的時(shí)間,是一種典型的空間換時(shí)間的策略。

總結(jié)

說(shuō)了這么多,雖然看起來(lái)Solid.js對(duì)比React在框架的某些方面是有優(yōu)勢(shì)的,但并不能撼動(dòng)React的統(tǒng)治地位。

畢竟,React這么流行和他快不快一點(diǎn)關(guān)系都沒(méi)有,社區(qū)生態(tài)繁榮才是最重要的。

還有個(gè)有意思的事,這里是文中的2個(gè)Demo地址:

  • Solid.js版[2]
  • React版[3]

Demo中獲取數(shù)據(jù)的API的域名是rickandmortyapi.com,居然還有這種網(wǎng)站......

參考資料

[1]SolidJS vs React: I've Built the Same App On Both Libraries.:

https://dev.to/ogzhanolguncu/solidjs-vs-react-i-ve-built-the-same-app-on-both-libraries-4cfa[2]Solid.js版:

https://github.com/ogzhanolguncu/rick-and-morty-solidjs[3]React版:

https://github.com/ogzhanolguncu/react-rick

 

責(zé)任編輯:姜華 來(lái)源: 魔術(shù)師卡頌
相關(guān)推薦

2009-11-29 16:53:17

2024-03-27 08:21:06

2020-07-22 14:30:50

程序員財(cái)富螞蟻金服

2023-10-04 19:42:58

化學(xué)獎(jiǎng)諾獎(jiǎng)泄密

2023-07-13 09:05:57

react hook類型types

2022-02-14 09:49:18

API微服務(wù)聚合

2020-03-04 14:10:14

戴爾

2019-08-29 09:00:55

開(kāi)發(fā)Flutter框架

2020-04-21 10:06:21

比爾蓋茨新冠預(yù)言

2021-09-27 09:19:13

微信關(guān)懷模式 騰訊

2015-10-18 16:43:25

2020-09-26 21:42:37

開(kāi)源數(shù)據(jù)挖掘工具

2017-12-15 15:47:24

2013-05-13 14:23:24

2020-10-22 15:14:22

iOS應(yīng)用系統(tǒng)

2021-07-15 06:47:56

微信iOS 8.0.8消息提示音

2017-12-08 11:22:48

互聯(lián)網(wǎng)

2021-08-19 17:14:46

AI 數(shù)據(jù)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久69| 欧美日韩亚洲视频 | 成人精品一区二区三区中文字幕 | 国产亚洲精品一区二区三区 | 亚洲一二三区av | 亚洲 中文 欧美 日韩 在线观看 | 国产视频黄色 | 可以免费观看的av | 香蕉久久久 | 国产一区二区三区欧美 | 免费成人高清 | 91久久久久久久久久久久久 | 国产ts人妖系列高潮 | 91精品国产一二三 | 日韩免费 | 一本色道精品久久一区二区三区 | 午夜久久久久久久久久一区二区 | 韩国av网站在线观看 | 久久精品黄色 | 国产99久久精品一区二区永久免费 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 日韩欧美国产不卡 | 三a毛片| 国产精品一区一区三区 | 日韩伦理一区二区 | 亚洲精品日韩在线观看 | 四虎影院在线播放 | 国产精品夜夜夜一区二区三区尤 | 在线欧美小视频 | 国产999精品久久久久久 | 久久精品国产一区二区电影 | 色偷偷噜噜噜亚洲男人 | 97国产精品视频人人做人人爱 | 欧美大片黄 | 日韩福利在线观看 | 国产91一区二区三区 | 亚洲欧美综合精品久久成人 | 免费观看黄色一级片 | 国产精品高潮呻吟久久 | 成人久久久久 | 日韩国产精品一区二区三区 |