大多数框架把响应式逻辑放在运行时:发数据变化后比对虚拟树再修补 DOM。Svelte 换了个思路——这些分析在编译阶段完成:它看着源码里谁依赖谁,直接生成出修改对应 DOM 节点的具体指令。运行时极小、包体只有几 KB,也不需要 diff 计算。
写法上它接近写 HTML 与 JS 本身:一个 .svelte 文件里 script、markup、style 三段,状态是普通变量,赋值即触发更新。代价是离开了运行时框架,调试工具与生态丰度不及 React/Vue,复杂巨型应用上选型需谨慎。
// Svelte 思想的伪代码:编译期生成精准 DOM 更新指令 // 源码(开发者写的) // <script> let count = 0; </script> // <button on:click={() => count++}>{count}</button> // 编译后大致产物(框架思想演示) var count = 0; var button = document.createElement('button'); var text0 = document.createTextNode(String(count)); button.appendChild(text0); button.addEventListener('click', function () { count++; // 赋值即触发 text0.data = String(count); // 编译器知道只需更新这一个文本节点 }); document.body.appendChild(button); // 对比虚拟 DOM 方案:每次都要 diff 整棵子树