这会是制约Svelte发展的最大因素么
大家好,我卡颂。
这些年前端框架一直呈螺旋状发展。
具体来说,很多主流前端框架采用的技术实际上很早就被发明了。比如10年,细粒度更新就在Knockout
中首创。
新框架的出现一般遵循:
一个新的 主意 + 现有技术的排列组合最近2年,最受欢迎的主意便是
Svelte
带来的重编译时概念了。这也让他成为
StackOverflow
21年开发者报告中最受欢迎的框架。文章图片
然而,开源界和工业界可能是两幅光景:
开发者嘴上说着"哎呦,这个框架不错哦",等到写项目时身体却很诚实的选择了
React
。这也不能怪开发者。毕竟,生态才是前端框架最重要的部分。
本文要讲的,就是个很可能制约
Svelte
生态发展的因素。文章图片
从VUE聊起 当初
VUE3
在技术选型时,有个考虑的点是:要不要移除 虚拟DOM,拥抱 重编译时虚拟DOM的作用是:找到交互造成的
UI
变化的部分。但是,
VUE3
采用细粒度更新,理论上只要粒度足够细,就完全不需要虚拟DOM。文章图片
通常,依赖虚拟DOM的框架,虚拟DOM会占据运行时一大半工作量(比如
React
、VUE
)。如果能移除虚拟DOM能带来如下好处:
- 打包后的框架代码体积减少
- 运行时交互造成
UI
更新的流程更短
VUE3
最终保留了虚拟DOM,其中一个很重要的原因是:虚拟DOM能弥补 模版语言的局限虚拟DOM的优势 比如,当你需要在
VUE
中实现布局组件:
1
2
33
44
期望的效果是:嵌套在
Layout
中的结构有不同缩进。输出的
HTML
如下:1
233
44
这需要用到
slot
特性。但是注意这部分,需要根据组件传入的
level prop
动态改变:
// ...
比如:
level = 1
对应class="layout--1"
。【这会是制约Svelte发展的最大因素么】单纯使用模版语法,已经没办法描述这个特性了。
此时,就需要你手写render函数。
所以,为了编写复杂组件,
VUE
为开发者开放了模版语法与手写render函数两条路子。之所以能有两条路子,是因为这两条路最终都通向虚拟DOM。
文章图片
前端框架生态中很重要的一环,便是组件库的丰富程度了。
为了一个好用的组件库换框架是常有的事。
所以,为了减少开发者编写复杂组件的成本,
VUE
保留了虚拟DOM。Svelte永远闭上的门 作为和
VUE
一样采用模版语法的框架,Svelte
选择重编译时道路。这就意味着他永远抛弃了虚拟DOM,也抛弃了虚拟DOM带来的灵活性。
文章图片
在讨论Render functions的PR中,官方明确表示:
Svelte永远不会考虑render函数既然抛弃了render函数(以及背后的虚拟DOM),那么当编写复杂组件时,唯一的出路便是:
提供更多、更复杂的
API
以应对复杂场景
比如:对于slot
特性,Svelte
提供了4个API
:- \
- \
- $ $slots
- \
React
,由于极度灵活,压根没有对应API
。文章图片
我们可以大胆的推测,编写复杂组件的成本:
React
< VUE
< ... < Svelte
总结 如果一个框架只是概念新奇,会得到一时的关注。
但是,只有在
DX
(开发者体验)、UX
(用户体验)都做到平衡的框架才能在工业界长久存在。这一点上,
Svelte
任重道远。推荐阅读
- 热闹中的孤独
- 我要做大厨
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 爱就是希望你好好活着
- 太平之莲
- 知识
- 叙述作文
- 时间老了
- 清明,是追思、是传承、是感恩。
- 我错了,余生不再打扰