自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

這會(huì)是制約Svelte發(fā)展的最大因素么

開(kāi)發(fā) 前端
最近2年,最受歡迎的「主意」便是Svelte帶來(lái)的「重編譯時(shí)」概念了。這也讓他成為StackOverflow21年開(kāi)發(fā)者報(bào)告中最受歡迎的框架。本文要講的,就是個(gè)很可能制約Svelte生態(tài)發(fā)展的因素。

[[421840]]

大家好,我卡頌。

這些年前端框架一直呈螺旋狀發(fā)展。

具體來(lái)說(shuō),很多主流前端框架采用的技術(shù)實(shí)際上很早就被發(fā)明了。比如10年,「細(xì)粒度更新」就在Knockout中首創(chuàng)。

新框架的出現(xiàn)一般遵循:

一個(gè)新的「主意」 + 現(xiàn)有技術(shù)的排列組合

最近2年,最受歡迎的「主意」便是Svelte帶來(lái)的「重編譯時(shí)」概念了。

這也讓他成為StackOverflow21年開(kāi)發(fā)者報(bào)告中最受歡迎的框架。

然而,開(kāi)源界和工業(yè)界可能是兩幅光景:

開(kāi)發(fā)者嘴上說(shuō)著"哎呦,這個(gè)框架不錯(cuò)哦",等到寫(xiě)項(xiàng)目時(shí)身體卻很誠(chéng)實(shí)的選擇了React。

這也不能怪開(kāi)發(fā)者。畢竟,生態(tài)才是前端框架最重要的部分。

本文要講的,就是個(gè)很可能制約Svelte生態(tài)發(fā)展的因素。

從VUE聊起

當(dāng)初VUE3在技術(shù)選型時(shí),有個(gè)考慮的點(diǎn)是:

  • 要不要移除「虛擬DOM」,擁抱「重編譯時(shí)」

「虛擬DOM」的作用是:找到交互造成的UI變化的部分。

但是,VUE3采用「細(xì)粒度更新」,理論上只要粒度足夠細(xì),就完全不需要「虛擬DOM」。

通常,依賴「虛擬DOM」的框架,「虛擬DOM」會(huì)占據(jù)運(yùn)行時(shí)一大半工作量(比如React、VUE)。

如果能移除「虛擬DOM」能帶來(lái)如下好處:

打包后的框架代碼體積減少

運(yùn)行時(shí)交互造成UI更新的流程更短

但是,VUE3最終保留了「虛擬DOM」,其中一個(gè)很重要的原因是:

  • 「虛擬DOM」能彌補(bǔ)「模版語(yǔ)言」的局限

虛擬DOM的優(yōu)勢(shì)比如,當(dāng)你需要在VUE中實(shí)現(xiàn)「布局組件」:

  1. <Layout level={1}> 
  2.   <div>1</div> 
  3.   <div>2</div> 
  4.   <Layout level={2}> 
  5.     <div>33</div> 
  6.     <div>44</div> 
  7.   </Layout> 
  8. </Layout> 

期望的效果是:嵌套在Layout中的結(jié)構(gòu)有不同縮進(jìn)。

輸出的HTML如下:

  1. <div class="layout"
  2.   <div class="layout--1"
  3.     <div>1</div> 
  4.     <div>2</div> 
  5.     <div class="layout"
  6.       <div class="layout--2"
  7.         <div>33</div> 
  8.         <div>44</div> 
  9.       </div> 
  10.     </div> 
  11.   </div> 
  12. </div> 

這需要用到slot特性。

但是注意這部分,需要根據(jù)組件傳入的level prop動(dòng)態(tài)改變:

  1. <div class="layout--1"
  2.   // ... 
  3. </div> 

 比如:level = 1對(duì)應(yīng)class="layout--1"。

單純使用「模版語(yǔ)法」,已經(jīng)沒(méi)辦法描述這個(gè)特性了。

此時(shí),就需要你手寫(xiě)「render函數(shù)」。

所以,為了編寫(xiě)復(fù)雜組件,VUE為開(kāi)發(fā)者開(kāi)放了「模版語(yǔ)法」與「手寫(xiě)render函數(shù)」兩條路子。

之所以能有兩條路子,是因?yàn)檫@兩條路最終都通向「虛擬DOM」。

[[421841]]

前端框架生態(tài)中很重要的一環(huán),便是組件庫(kù)的豐富程度了。

為了一個(gè)好用的組件庫(kù)換框架是常有的事。

所以,為了減少開(kāi)發(fā)者編寫(xiě)復(fù)雜組件的成本,VUE保留了「虛擬DOM」。

Svelte永遠(yuǎn)閉上的門(mén)

作為和VUE一樣采用「模版語(yǔ)法」的框架,Svelte選擇「重編譯時(shí)」道路。

這就意味著他永遠(yuǎn)拋棄了「虛擬DOM」,也拋棄了「虛擬DOM」帶來(lái)的靈活性。

在討論Render functions的PR[1]中,官方明確表示:

Svelte永遠(yuǎn)不會(huì)考慮render函數(shù)

既然拋棄了「render函數(shù)」(以及背后的「虛擬DOM」),那么當(dāng)編寫(xiě)復(fù)雜組件時(shí),唯一的出路便是:

  • 提供更多、更復(fù)雜的API以應(yīng)對(duì)復(fù)雜場(chǎng)景

比如:對(duì)于slot特性,Svelte提供了4個(gè)API:

  • <slot>
  • <slot name="name">
  • $$slots
  • <slot key={value}>

反觀React,由于極度靈活,壓根沒(méi)有對(duì)應(yīng)API。

我們可以大膽的推測(cè),編寫(xiě)復(fù)雜組件的成本:

React < VUE < ... < Svelte

總結(jié)

如果一個(gè)框架只是概念新奇,會(huì)得到一時(shí)的關(guān)注。

但是,只有在DX(開(kāi)發(fā)者體驗(yàn))、UX(用戶體驗(yàn))都做到平衡的框架才能在工業(yè)界長(zhǎng)久存在。

這一點(diǎn)上,Svelte任重道遠(yuǎn)。

參考資料

[1]討論Render functions的PR:

https://github.com/sveltejs/svelte/issues/4971

 

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

2018-12-03 08:54:09

數(shù)據(jù)中心微軟技術(shù)

2017-02-05 14:49:39

2016-11-09 15:13:57

大數(shù)據(jù)鄂維南大數(shù)據(jù)行業(yè)

2016-11-10 09:19:59

大數(shù)據(jù)制約發(fā)展

2012-06-12 16:37:36

Linux操作系統(tǒng)

2021-04-06 14:01:19

人工智能AI

2019-02-11 13:57:26

比特幣網(wǎng)絡(luò)加密貨幣

2013-01-18 10:20:21

盜版移動(dòng)閱讀iReader

2020-03-12 18:12:10

Google FuchAndroid移動(dòng)應(yīng)用

2015-10-30 11:36:18

可穿戴設(shè)備大數(shù)據(jù)

2009-06-29 19:26:50

刀片服務(wù)器數(shù)據(jù)中心服務(wù)器

2022-12-28 07:33:18

項(xiàng)目Spring架構(gòu)

2017-12-07 20:34:07

2013-04-15 09:44:00

電線電纜光纖網(wǎng)絡(luò)

2015-11-23 09:50:25

包月計(jì)費(fèi)公有云IDC

2015-06-19 15:35:25

SDN非技術(shù)

2012-08-14 10:23:54

云計(jì)算寬帶

2021-02-02 21:32:49

區(qū)塊鏈醫(yī)療科技

2018-05-03 07:38:55

多云公有云SaaS
點(diǎn)贊
收藏

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