文中提到:Angular is not as fast-growing as Svelte or Vue and not as widely used as React, ...
把 svelte 列在了 vue 的前面,让我吃了一惊。按照去年的统计,svelte 还被归在其它里面。而且我当时大概瞅了瞅之后,只关注了 mithril
https://2018.stateofjs.com/front-end-frameworks/other-libraries/
于是就去官网瞅了瞅,svelte 果然搞事情了,今年4月22日发布了版本3。刚才看了一下官网上的视频介绍(
https://www.youtube.com/watch?v=AdNJ3fydeao),视频里还有不少其它挺有意思的东西,回头慢慢研究,这36分钟花的挺值的。
因为各方面都跟 vue 长得更像一些,所以就不拿 react 一起比了。
- reactibility: vue 通过 setter/proxy 感知数据的变化,然后通过 vdom 做比较要不要重绘。svelte 步子跨更大,直接改语言,在编译后的代码里感知变化,然后去通知更新相应的 dom
- vdom vs dom: vue 使用了 vdom,需要对 vdom 做 diff,有改变才去更新 dom。svelte 直接更新 dom,略过了 vdom 这一层额外的 cpu 和内存开销。
- 控件:.vue 文件包括一个 template 段(html),一个 script 段,任意数量 style 段,通过编译生成一个 js 代码段和一个 css 代码段。.svelte 文件基本可以看成 html 代码段,你的 html 不需要包在根 <template> 里面、也不要求只有一个根节点,没仔细看不知道 script 段能不能有多个,style 段默认相当于 vue 里面的 scoped。
- 写法:vue 需要 data、computed 等等的 api 接口,在 html 模板里用 {{ xxx }} 嵌入表达式,用 v-if、v-for 等做控制流,v-model 做双向绑定。svelte 更狠,没有 api,模板里的控制流就是后端熟悉的味道,跟 razor、blade 之类长差不多,bind:value 做双向绑定。
- svelte 特殊语法:前面说了,svelte 是“编译”,它搞了一个新语法:
let foo = 1;
$: bar = foo * 2;
这个 bar 相当于 vue 里面的 computed,或者理解成 excel 里面的公式,只要你改变 foo 的值,bar 的值就会跟着变。而且你也可以
$: if (foo === xxx) ...
$: console.log(foo);
意味着只有 foo 的值发生变化,相应的代码才会执行,跟 observable.subscribe 是一个感觉。
由于是编译成普通的 js,操作基本上不用走库,也就意味着效率奇高,而且 runtime 库不需要很大。这样一来,不论是 bundle size、加载速度、cpu 和内存占用,svelte 都不会比纯 js 差太多:
https://krausest.github.io/js-framework-benchmark/current.html目前我知道的也就这么多,要是问我 ts 支持啊、redux/vuex 之类、router 等等生态我都完全不了解。ui 库的话,估计也只能用 bulma 或者 tailwind 那种纯 css 积木,不太可能有非常成熟的 js 库。不过官网上倒是说了,可以直接用 css-in-js 的库
总而言之,目前看起来的确是变得非常有趣了,难怪前几天 vue 吵架有人说转 svelte,我还在想为啥会有这种想法。虽然我觉得它还没成熟到可以投入生产环境,但应该还是比较有前途的前端框架,假以时日赶超 angular 也不是不可能。
svelte 官网示例:
https://svelte.dev/examples
【 在 eGust (十年) 的大作中提到: 】
:
https://blog.bitsrc.io/the-state-of-angular-in-2019-b5fb7783a1c6: The State of Angular in 2019
: A detailed overview of the current state of Angular, from the latest features to the hottest topics and trends that you may have missed
: ...................
--
修改:eGust FROM 125.238.192.*
FROM 125.238.192.*