Svelte 的几个优缺点

1,309 阅读5分钟

特点

  • 减少代码量:重复利用你所掌握的编程语言 - HTML、CSS 和 JavaScript,构建的组件无需依赖模板文件。

  • 无虚拟 DOM:Svelte 将你的代码编译成体积小、不依赖框架的普通 JS 代码,让你的应用程序无论启动还是运行都变得迅速。

  • 真正的反应能力:无需复杂的状态管理库,Svelte 为 JavaScript 自身添加反应能力。

优势

  1. 性能优化: 构建应用的时候,采用预构建处理。 Svelte 通过在构建过程中将应用程序代码转换为高效的、可执行的 JavaScript 代码,从而实现了出色的性能。相比其他框架,Svelte 在运行时的开销更小,加载时间更短,页面响应更迅速。

  2. 尺寸小巧:Svelte 生成的代码非常精简,因为它将框架本身的功能转化为原生 JavaScript 代码,不需要在运行时包含额外的运行时库。这使得生成的应用程序文件大小更小,可以更快地下载和加载。

  3. 响应式编程:Svelte 提供了内置的响应式编程能力,使得在应用程序中处理状态和数据变化更加简单和直观。你可以使用 reactive 关键字将变量声明为响应式,并通过在模板中使用绑定表达式来自动更新相关的部分。

  4. 组件化开发:Svelte 支持组件化开发模式,你可以将应用程序划分为可重用的组件,并使用 props 和事件来实现组件之间的通信。Svelte 的组件化开发具有简单、清晰的语法,并提供了丰富的生命周期钩子和上下文 API,方便你管理组件的状态和行为。

  5. 无虚拟 DOM:与许多其他框架不同,Svelte 不使用虚拟 DOM 进行 UI 更新。它通过跟踪状态的变化并生成适当的 DOM 更新代码,从而实现更高效的渲染。这意味着在 Svelte 中,你无需手动编写模板,而是直接在组件中描述 UI 的结构和行为。

Svelte 在未使用虚拟DOM的情况下实现了响应式设计。

简单理解:Svelte 会监听顶层组件所有变量,一旦某个变量发生变化,就更新使用过该变量的组件。这就仅仅只需更新受影响的那部分DOM元素,而不需要整个组件更新。

虚拟DOM的思想很优秀,也是顺应时代的产物,但虚拟DOM并不是最快的,JS 直接操作 DOM 才是最快。

Virtual DOM 就是 虚拟DOM,是用 JS 对象描述 DOM 节点的数据,由 React 团队推广出来的。

虚拟DOM React 和 Vue中都使用。

在 React 中实现数据驱动视图大概流程是这样的:


复制代码数据发生变化 -> 通过diff算法判断要更新哪些节点 -> 找到要更新的节点 -> 更新真实DOM

Vue 的数据更新原理其实也差不多,只是实现方式和使用语法会有所不同。

diff算法 会根据数据更新前和更新后生成的虚拟DOM进行对比,只有两个版本的虚拟DOM存在差异时,才会更新对应的真实DOM。

使用虚拟DOM对比的方式会比直接对比真实DOM的效率高。

而且真实DOM身上挂载的属性和方法非常多,使用虚拟DOM的方式去描述DOM节点树会显得更轻便。

但这也意味着每次数据发生变化时都要先创建一个虚拟DOM,并使用 diff算法 将新虚拟DOM与旧虚拟DOM进行比对,这个步骤会消耗一点性能和需要一点执行时间。

缺点

尽管 Svelte 拥有许多优点,但它也存在一些潜在的缺点:

  1. 生态系统相对较小:相比于像 React 和 Vue 这样的成熟框架,Svelte 的生态系统相对较小。这意味着你可能无法找到与其他框架相同数量和多样性的第三方库、组件和工具。

  2. 学习曲线:虽然 Svelte 的语法和概念相对简单,但学习一种新的框架仍然需要一定的时间和精力。相比起较流行的框架,Svelte 的学习资源和教程相对较少。

  3. 社区支持有限:由于 Svelte 是一个相对较新的框架,其社区支持相对有限。

  4. 工具和插件生态系统相对不成熟:与其他流行框架相比,Svelte 的工具和插件生态系统相对不成熟。

总结

Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程序的编译阶段来处理。

与使用虚拟(virtual)DOM 差异对比不同。Svelte 编写的代码在应用程序的状态更改时就能像做外科手术一样更新 DOM。

总体而言,Svelte 的优势在于其出色的性能、小巧的尺寸、响应式编程能力、组件化开发模式以及无虚拟 DOM 的渲染方式。这些特点使得开发者可以更快地构建高性能的 Web 应用程序,并提供了更好的开发体验和用户体验。