为什么 Svelte 组件的增量成本高于 VDOM 框架?

Why is Svelte Component incremental cost greater than VDOM frameworks?

这是来自这个问题:https://github.com/sveltejs/svelte/issues/2546

为什么说“组件的增量成本肯定大得多”?是吗?

有人可以帮我打开包装吗?

需要明确的是,当 Rich 说“成本”时,他指的是编译代码的包大小。在网络应用程序的上下文中,这显然是一种成本。为了便于说明,让我们将 svelte 与 react 进行比较。

React 需要 'react' 运行时库和 'react-dom' 渲染器库,也就是 VDOM 运行时,才能正常工作。因此,您需要为这些运行时库的大小支付前期费用。但是对于你添加到应用程序包中的每个组件,包大小的“增量成本”只是组件代码的大小,如果你不使用 JSX,几乎是这样。即使这样做,从源代码到编译代码的代码大小 inflation 比率也接近于 1。

使用 svelte,您不需要 VDOM 运行时。因此,除了小巧的运行时库之外,几乎没有前期成本。但是对于你添加的每一个组件,你的源.svelte代码都会被编译器编译(并不可避免地膨胀)成.js代码,inflation比率远大于1。因此Rich说“一个组件的增量成本要大得多”。

有人 done the math。根据@halfnelson,我们有这两个等式:

Svelte Bundle Bytes = 0.493 * Source_Size + 2811
React Bundle Bytes = 0.153 * Source_Size + 43503

他的计算是使用精简代码完成的,因此两个乘数都小于 1。你可以看出每个 svelte 组件的“增量成本”是反应成本的 3 倍。但前期运行成本是 React 的 1/15。

除了 hackape 的回答之外,这里有一张图表,我希望它能说明差异。

在左侧,我们有采用黑盒方法的传统框架。这些组件就像框架的指令集一样工作。结果,框架通常包括所有可用的功能,因为它不知道可以使用什么。 (注意,一些像 Vue-3 这样的框架现在允许创建一个只包含所需部分的包)。另一方面,Svelte 会编译组件,并将需要的部分注入到组件中。当添加到每个组件的所有功能超过框架(react、vue 等)的大小时,就会出现临界点。鉴于注入的 svelte 脚本的大小是基于组件的内容,仅根据组件的数量很难判断何时会出现这个临界点。