这会是制约Svelte发展的最大因素么

开发 前端
最近2年,最受欢迎的「主意」便是Svelte带来的「重编译时」概念了。这也让他成为StackOverflow21年开发者报告中最受欢迎的框架。本文要讲的,就是个很可能制约Svelte生态发展的因素。

[[421840]]

大家好,我卡颂。

这些年前端框架一直呈螺旋状发展。

具体来说,很多主流前端框架采用的技术实际上很早就被发明了。比如10年,「细粒度更新」就在Knockout中首创。

新框架的出现一般遵循:

一个新的「主意」 + 现有技术的排列组合

最近2年,最受欢迎的「主意」便是Svelte带来的「重编译时」概念了。

这也让他成为StackOverflow21年开发者报告中最受欢迎的框架。

然而,开源界和工业界可能是两幅光景:

开发者嘴上说着"哎呦,这个框架不错哦",等到写项目时身体却很诚实的选择了React。

这也不能怪开发者。毕竟,生态才是前端框架最重要的部分。

本文要讲的,就是个很可能制约Svelte生态发展的因素。

从VUE聊起

当初VUE3在技术选型时,有个考虑的点是:

  • 要不要移除「虚拟DOM」,拥抱「重编译时」

「虚拟DOM」的作用是:找到交互造成的UI变化的部分。

但是,VUE3采用「细粒度更新」,理论上只要粒度足够细,就完全不需要「虚拟DOM」。

通常,依赖「虚拟DOM」的框架,「虚拟DOM」会占据运行时一大半工作量(比如React、VUE)。

如果能移除「虚拟DOM」能带来如下好处:

打包后的框架代码体积减少

运行时交互造成UI更新的流程更短

但是,VUE3最终保留了「虚拟DOM」,其中一个很重要的原因是:

  • 「虚拟DOM」能弥补「模版语言」的局限

虚拟DOM的优势比如,当你需要在VUE中实现「布局组件」:

  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中的结构有不同缩进。

输出的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特性。

但是注意这部分,需要根据组件传入的level prop动态改变:

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

 比如:level = 1对应class="layout--1"。

单纯使用「模版语法」,已经没办法描述这个特性了。

此时,就需要你手写「render函数」。

所以,为了编写复杂组件,VUE为开发者开放了「模版语法」与「手写render函数」两条路子。

之所以能有两条路子,是因为这两条路最终都通向「虚拟DOM」。

[[421841]]

前端框架生态中很重要的一环,便是组件库的丰富程度了。

为了一个好用的组件库换框架是常有的事。

所以,为了减少开发者编写复杂组件的成本,VUE保留了「虚拟DOM」。

Svelte永远闭上的门

作为和VUE一样采用「模版语法」的框架,Svelte选择「重编译时」道路。

这就意味着他永远抛弃了「虚拟DOM」,也抛弃了「虚拟DOM」带来的灵活性。

在讨论Render functions的PR[1]中,官方明确表示:

Svelte永远不会考虑render函数

既然抛弃了「render函数」(以及背后的「虚拟DOM」),那么当编写复杂组件时,唯一的出路便是:

  • 提供更多、更复杂的API以应对复杂场景

比如:对于slot特性,Svelte提供了4个API:

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

反观React,由于极度灵活,压根没有对应API。

我们可以大胆的推测,编写复杂组件的成本:

React < VUE < ... < Svelte

总结

如果一个框架只是概念新奇,会得到一时的关注。

但是,只有在DX(开发者体验)、UX(用户体验)都做到平衡的框架才能在工业界长久存在。

这一点上,Svelte任重道远。

参考资料

[1]讨论Render functions的PR:

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

 

责任编辑:姜华 来源: 魔术师卡颂
相关推荐

2017-02-05 14:49:39

2018-12-03 08:54:09

数据中心微软技术

2016-11-09 15:13:57

大数据鄂维南大数据行业

2016-11-10 09:19:59

大数据制约发展

2012-06-12 16:37:36

Linux操作系统

2021-04-06 14:01:19

人工智能AI

2013-01-18 10:20:21

盗版移动阅读iReader

2019-02-11 13:57:26

比特币网络加密货币

2020-03-12 18:12:10

Google FuchAndroid移动应用

2015-10-30 11:36:18

可穿戴设备大数据

2009-06-29 19:26:50

刀片服务器数据中心服务器

2022-12-28 07:33:18

项目Spring架构

2017-12-07 20:34:07

2013-04-15 09:44:00

电线电缆光纤网络

2015-11-23 09:50:25

包月计费公有云IDC

2015-06-19 15:35:25

SDN非技术

2018-05-03 07:38:55

多云公有云SaaS

2024-01-23 15:23:06

数据中心服务器电力基础设施

2012-08-14 10:23:54

云计算宽带
点赞
收藏

51CTO技术栈公众号