React、Vue 等主流框架在浏览器中维护一份虚拟 DOM(或等价的轻量节点描述)。当状态变化时,框架先在虚拟 DOM 上进行比对(diffing),计算出最小变更,再批量应用到真实 DOM。这套机制灵活,能处理任意的动态更新,但比对与协调本身会带来运行时开销。
Svelte 没有虚拟 DOM。编译器在编译阶段就能静态分析出"哪个变量被模板的哪些位置引用",于是可以为每个响应式赋值点生成精确的 DOM 更新代码。当变量被修改时,运行时直接执行对应的 DOM 操作,无需比对,也无需协调。
由于省去了虚拟 DOM 这一层,Svelte 应用没有框架运行时的常驻开销,编译产物更小,首次渲染与局部更新的路径更短。代价是响应式的可追踪性依赖编译期的静态分析:对于编译期无法确定的动态属性访问等场景,需要借助显式的响应式机制(如 Runes)来表达。