前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >尤大亲自评测 Vue3 和 Svelte(19个组件后Vue更好!)

尤大亲自评测 Vue3 和 Svelte(19个组件后Vue更好!)

作者头像
陈大鱼头
发布于 2021-07-23 07:15:47
发布于 2021-07-23 07:15:47
2K0
举报
文章被收录于专栏:鱼头的Web海洋鱼头的Web海洋

近日尤大亲自创建了一个仓库用来对 Svelte 和 Vue3 组件进行了评测。这其实对我来说非常的感兴趣,因为我最近在业务项目中采用了 Svelte 进行了开发。

那么到底结果到底是如何呢?(期待的眼神,以为尤大要写 Svelte 代码来进行评测了。

Vue 大家都很熟悉了,如果你不知道 Svelte 是啥?可以看后起之秀前端框架 Svelte 从入门到原理

大体介绍一下,Svelte 是一个 No Runtime —— 无运行时代码 的框架。

下面是Jacek Schae大神的统计,使用市面上主流的框架,来编写同样的 Realword 应用的体积:

下面就请看详细的研究步骤,如果你对研究步骤不感兴趣,可以直接跳到最后看结论。

研究的步骤

为了公平性,尤大选择了 todomvc 来进行构建比较,然后列举了一系列的步骤方案。

  1. 这两个框架都实现了一个简单的符合规范、功能相同的todomvc 组件。
    • Vue: todomvc.vue (使用了<script setup> 语法)
    • Svelte: todomvc.svelte (基于官方的实现, 为了公平去除了 uuid 方法,害,失望了,原来尤大么有亲自写组件)
  2. 组件使用各自框架的在线 SFC 编译器进行单独编译
    • Vue: sfc.vuejs.org @3.1.4 -> todomvc.vue.js
    • Svelte: svelte.dev/repl @3.38.3 -> todomvc.svelte.js
  3. 编译文件使用 Terser REPL 压缩,然后删除 ES imports 和 exports。这是因为在一个 bundle 的应用程序中,这些 imports/exports不需要或在多个组件之间共享。(可以理解为类似第三方代码,不会影响组件内部实现的大小)
    • Vue: todomvc.vue.min.js
    • Svelte: todomvc.svelte.min.js
  4. 然后把文件使用gzipbrotli「Brotli」是一个开源数据压缩程序库, 类似于 gzip )压缩
    • Vue: todomvc.vue.min.js.gz / todomvc.vue.min.js.brotli
    • Svelte: todomvc.svelte.min.js.gz / todomvc.svelte.min.js.brotli
  5. 另外,在 SSR 的环境下,Svelte 需要在 "hydratable" 模式下编译其组件,这会引入额外的代码生成。在编译 Svelte 的时候使用选项 hydratable: true 来开启 SSR 并重复 2-4 的步骤。 Vue在 SSR 环境下生成的代码是完全相同的,但是引入了一些额外的 hydration-specific 运行时代码(~0.89kb min + brotli).
  6. 对于每个框架,默认使用 Vite 来创建和打包构建(Svelte 使用 hyderable: false)。每个应用程序同时设置SSR的模式再构建一次。

默认 Vite 打包产生一个 vendor chunk(= 框架运行时代码)和一个 index chunk(= 组件代码)。

Vue

Vue (SSR)

Svelte

Svelte (SSR)

Source

3.93kb

-

3.31kb

-

Compiled w/o imports (min)

2.73kb

-

5.01kb (183.52%)

6.59kb (241.39%)

Compiled w/o imports (min+gz)

1.25kb

-

2.13kb (170.40%)

2.68kb (214.40%)

Compiled w/o imports (min+brotli)

1.10kb

-

1.88kb (170.91%)

2.33kb (211.82%)

Vite component chunk (min+brotli)

1.13kb

-

1.95kb (172.26%)

2.41kb (213.27%)

Vite vendor chunk (min+brotli)

16.89kb

17.78kb

1.85kb

2.13kb

❝注意:w/o 的意思为 without ,"去除"的意思 ❞

分析

在客户端模式下,从 Vite vendor chunk (min+brotli) 这一栏分析 。Svelte App 导入1.85kb min+brotli 框架代码,比 Vue 轻15.04kb。这似乎看起来非常的强悍,但是这是因为框架运行时的差异。(Svelte 没有运行时,Vue有运行时)

再来看看组件代码,Svelte 的 min + compressed 输出大小是Vue的~1.7倍。在这种情况下,单个组件会导致0.78kb的大小差异。在 SSR 的情况下,这一比例进一步上升到~2.1倍,其中单个组分导致 1.23kb 大小的差异。

Todomvc 非常具有代表性,代表大多数用户在应用场景中构建使用的组件。我们可以合理地假设在现实场景中会发现类似的大小差异。也就是说,在理论上,如果一个应用程序包含超过15.04 / 0.78〜= 19个 Todomvc 大小的组件,则 Svelte 应用程序将最终比Vue应用程序体积更大。

在 SSR 场景中,这个阈值会更低。在 SSR 模式下,虽然框架差异为15.65KB,但是 Compnent Count 阈值下降到 15.65 / 1.23〜= 13!

显然在真实世界应用程序中,有许多其他因素:将从框架中导入更多功能,并将使用第三方库。大小曲线将受到项目中纯组件代码的百分比的影响。但是,保守估计 应用 APP 如果比 19个组件 这个阈值(或者在SSR模式下的13个 )越大,Svelte 的体积优势就越少。

结论

在仓库的README中尤大给出了两个结论,我就给它移到了最后。

  • Svelte 单组件在普通模式下比 Vue3 单组件约大70% ,在 SSR 模式下大110% (公众号作者秋风注:其实这里尤大说的有点问题,这个70%指的是当前 todomvc 组件的大小对比,并不代表着所有 Svelte 组件 比 vue 3 组件 大 70%, 换句话说如果一个 100k 大小的 Vue 组件,Svelte组件可能就只有 101k,而不是170k !)
  • 对于项目来说,当编写的组件大于19个组件(SSR模式为 13个组件)Svelte 的优势与 Vue3 相比就不存在了。

总的来说

本研究并的目的不是来说哪种框架更好 —— 它关注的是分析不同框架的策略对体积大小的影响。

从数据中可以看出,两个框架在 bundle 大小方面具有不同的优势 —— 取决于您的使用情况。Svelte 仍然很棒,适用于一次性组件(例如,作为自定义元素包装),但它在大规模 APP 中在体积大小方面实际上是它的缺点,特别是SSR。

在更广泛的意义上,本研究旨在展示框架如何在compile-time 编译时runtime spectrum 运行时找到一个平衡点:Vue 在源码上使用了一定的 compile-time 编译时 优化,但选择较重的 compile-time 返回较小的生成代码。Svelte选择最小的运行时,但具有较重生成的代码的成本。Svelte 可以进一步改进其代码生成来降低代码输出吗?Vue可以进一步改善tree-shaking,使基线(运行时框架)变小吗?另外一点框架可以找到更好的平衡点吗?对以上所有的问题的答案回答可能是肯定的 —— 但现在我们需要明确的是"框架大小"是比单单比较 Hello World 应用程序的大小的更加细致的话题,这项研究就是为了证明这一点。

个人意见

以下为公众号作者的个人意见,并非尤大调研中的观点。

其实尤大总体来说就是想要凸显出在框架的对比中,单单使用 Jacek Schae大神 统计的 那个 RealWord 应用程序来说是有些不公平的,应该需要更加细致的对比。其实对于 Svelte 这个包大小这个问题,其实很早之前在 Svelte Github 中也对 React 和 Svelte 进行了广泛的讨论。

Svelte 确实有一个阈值会使得它在一定程度后让体积大小没有了优势,但是在一般情况下,只要不是特别复杂的中后台管理应用,Svelte 应当会比其他框架体积小。

特别是在一些 H5 游戏中,如果你想要获得 React/Vue 数据驱动的方式编写应用,但是你又不想要引入他们这么大的运行时,确实来说是一个非常不错的方案。最近在开发一个基于 Three.js 的移动端网页,有一个初步的估计大约比使用 React 减少 30 - 50% 的体积,具体的数值因为还没迁移完无法给出完整的数据。还有一点,非运行时的框架,对于首屏的渲染也是有一个极大的帮助,你可以将首屏组件进行拆分,非运行时的首屏组件其实是非常小的,这对移动端来说非常的友好,因为毕竟使用 SSR 对应服务端还是有一定的压力要求的。

以上为个人看完尤大的分析比较后的一点愚见~ 如果不足之处请多多指出。

调研原文

https://github.com/yyx990803/vue-svelte-size-analysis

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鱼头的Web海洋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue 3是最佳选择吗? 耗时两周从Vue 2迁移到Svelte后:代码执行更快、体验更佳
整理 | 冬梅、核子可乐 到底选 Vue 3 还是 Svelte? 架构选型问题是每位 Web 开发人员都绕不开的一道难关。 架构是整个 IT 系统的根基,一个错误的选型,可能造成巨大的财务、人力损失。现在随着各种新应用的崛起,到底是选择 Bootstrap、Angular、React、Vue 还是 Svelte,让开发人员很犯难。而且随着 Vue 3 发布、Vue 2 即将停止维护,不少企业开始考虑升级问题,其中不止一家企业选择从 Vue 迁移到了 Svelte,并对 Svelte 的性能表示满意。
深度学习与Python
2023/05/09
3.1K1
Vue 3是最佳选择吗? 耗时两周从Vue 2迁移到Svelte后:代码执行更快、体验更佳
Rollup作者新作: Svelte Cubed!VR/AR 指日可待?
而会议中最令我眼前一新的当然是 轮子哥 Rich-Harris 带来的 Svelte Cubed 了。
秋风的笔记
2021/12/02
2.4K0
Rollup作者新作: Svelte Cubed!VR/AR 指日可待?
前端Svelte框架初体验
最近这些年,随着React、Vue、Angular三大框架逐渐稳定,前端技术栈的迭代似乎也渐渐缓慢下来。并且随着React 16版本推出 Fiber, Vue 3.0 版本的正式发布,前端三大框架都有了自己的护城河。
xiangzhihong
2022/07/30
4.1K1
前端Svelte框架初体验
尤雨溪在2025年Vue.js nation 大会上的分享内容!
上篇文章《🚀🚀🚀Vapor Mode发布前,你应该知道的一些事情!》根据自己的经验,对3.6版本的改变做了一些预测!
萌萌哒草头将军
2025/02/19
1860
尤雨溪在2025年Vue.js nation 大会上的分享内容!
新兴前端框架 Svelte 从入门到原理
前端领域是发展迅速,各种轮子层出不穷的行业。最近这些年,随着三大框架React、Vue、Angular版本逐渐稳定,前端技术栈的迭代似乎缓慢下来,React 16版本推出了 Fiber, Vue 3.0 也已经在襁褓之中。
前端森林
2021/03/04
1.9K0
Vapor Mode发布前,你应该知道的一些事情!
Vue3的Vapor Mode概念不知不觉已经提出来一年了,可以说是吊足了coder们的胃口,我去年的一篇莫名其妙成为爆款的文章🎉尤雨溪为什么要推出Vapor Mode🎉中,我直观的展示了细粒度更新dom的优点,让大家历历在目!
萌萌哒草头将军
2025/02/19
1260
Vapor Mode发布前,你应该知道的一些事情!
Svelte入门——Web Components实现跨框架组件复用
Svelte 是构建 Web 应用程序的一种新方法,推出后一直不温不火,没有继Angular、React和VUE成为第四大框架,但也没有失去热度,无人问津。造成这种情况很重要的一个原因是,Svelte 的核心思想在于【通过静态编译减少框架运行时的代码量】,它可以像React和VUE一样开发,但却没有虚拟DOM。,使它可以Svelte可以将代码编译为体积小、不依赖于框架的JS代码。
葡萄城控件
2021/11/29
1.6K0
Svelte入门——Web Components实现跨框架组件复用
一文讲透前端新秀 svelte
本文作者:nicolasxiao,腾讯前端高级工程师 引言 本文基于笔者在实际项目中应用svelte的调研报告整理而来,实际项目中,通过将 vue3 替换成 svelte,框架体积就从337.46kb减少到18kb,页面性能指标提升了57%。通过阅读本文,可以快速全面了解 svelte 的优缺点,社区支持,基础使用及核心原理。如果您想在实际项目中使用svelte,可以通过本文获得有力的佐证及足够信心。 1 svelte 是什么? 2、3年前就已经听说过 svelte 这个框架,但一直没有实际使用。svel
欧文
2023/02/28
4.7K1
一文讲透前端新秀 svelte
顺藤摸瓜,突然有点心疼尤雨溪,写vue3太难了
就在前天凌晨6点多,我在公众号上推送了一篇文 《尤雨溪:Vue3.0全球发布会在线视频》,没看过的戳标题回顾,真的建议有空多看几遍,重温下尤大帅气的脸庞,才是最重要的。
闰土大叔
2020/09/29
3K0
顺藤摸瓜,突然有点心疼尤雨溪,写vue3太难了
Vue Conf 2023 精彩回顾,新语法草案助 Vue 继续封神
前两天 Vue Mastery 刚刚发布了 Vue Conf 2023 US 的视频,虽然这个大会已经过去一段时间了,但是还是有非常多的内容值得去总结。
ssh_晨曦时梦见兮
2023/10/14
3040
Vue Conf 2023 精彩回顾,新语法草案助 Vue 继续封神
Vue设计与实现读后感(一)
技术是很纯粹的事情,并不是那些虚无缥缈的管理经验,技术是最简单的,你会就是会,不会就不会。技术也是分得清界限的,分别是了解,熟悉,创新。
吴文周
2022/03/08
5390
Vue设计与实现读后感(一)
快速了解Vue3的新特性
10月5日尤大大公布了 vue 3.0 的源码,目前还是 pre-alpha 状态,预计年后会发布正式版本,这个无疑是国庆期间前端圈最大的新闻了。虽然此前关于 vue 3.0众说纷纭,但是既然已经官宣了,而且明年有可能迁移至新的开发框架,是时候撸起袖子学习一波了。
用户9914333
2022/07/22
4760
快速了解Vue3的新特性
紧跟尤大的脚步提前体验Vue3新特性,你不会还没了解过Vue3吧
随着前端框架的快速更新迭代,现在的主流前端框架之一Vue.js迎来了它的新版本3.0。在今年2020的5月28日,Vue.js的作者尤雨溪公布了Vue3的整个设计过程,让我们来了解一下吧。
@零一
2021/01/29
1.4K0
紧跟尤大的脚步提前体验Vue3新特性,你不会还没了解过Vue3吧
挑战前端“三大框架”的解决方案
最近这些年,随着三大框架React、Vue、Angular版本逐渐稳定,前端技术栈的迭代似乎缓慢下来。
程序员老鱼
2023/05/23
4380
挑战前端“三大框架”的解决方案
Vue3 中的脚手架工具Vite到底牛在哪, 一文全知道
Vue是一套用于构建用户界面的渐进式框架,与其它大型 JS 框架不同,Vue 被设计为可以自底向上逐层应用,更易上手,还便于与第三方库或既有项目整合,因此,Vue完全能够为复杂的单页应用提供驱动。
秋风的笔记
2021/07/09
1.9K0
挑战“三大框架”的解决方案
最近这些年,随着三大框架React、Vue、Angular版本逐渐稳定,前端技术栈的迭代似乎缓慢下来。
程序视点
2023/05/08
5850
挑战“三大框架”的解决方案
尤雨溪主题演讲《2022 前端生态趋势》全记录
在过去几年中,发生的最大的一个开发范式层面的一个变化肯定是 React Hooks,React Hooks 推出可以说是启发了很多组件逻辑表达和逻辑附用的新范式。
清秋
2022/09/20
1.2K0
尤雨溪主题演讲《2022 前端生态趋势》全记录
抄笔记:尤雨溪在Vue3.0 Beta直播里聊到了这些…
在 4 月 21 日晚,Vue 作者尤雨溪在哔哩哔哩直播分享了Vue.js 3.0 Beta最新进展。以下是直播内容整理
前端劝退师
2020/04/27
1.4K0
从Todolist入门Svelte框架
​ Svelte和React、Vue这些JavaScript框架类似,希望开发者更好的去构建交互式界面,但不同的是Svelte在构建/编译阶段将应用程序转换为理想的 JavaScript 应用,而不是在运行阶段 解释应用程序的代码。
ek1ng
2022/08/10
1.5K0
从Todolist入门Svelte框架
问了尤雨溪25个问题后,我的很多想法开始变了
5 月 9 日,我在视频号“来广营小盖”连麦了尤雨溪,和他聊了聊 Vue、Vite,以及前端工程师的成长等话题。在这之前,我为了更加全面了解尤大,也看了他所有的知乎回答,并且整理了一篇精华内容,同样放出来供你参考。 下面是连麦内容的文字版本,希望对你有所帮助。 另外,欢迎关注视频号“来广营小盖”,6 月,我会连麦周爱民(前端大神)、乔新亮(前苏宁技术 VP,年薪千万)、万俊峰(go-zero 作者,好未来资深专家)、左耳朵耗子等人,为你交付知识服务,和你一起共同成长。 关于 Vite、Flutter 和低代
深度学习与Python
2023/04/01
8910
问了尤雨溪25个问题后,我的很多想法开始变了
推荐阅读
相关推荐
Vue 3是最佳选择吗? 耗时两周从Vue 2迁移到Svelte后:代码执行更快、体验更佳
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档