跟着DeepWiki读Svelte.js

0 阅读2分钟

背景

由于Vue 3.6.0要新增去除VDOMVapor Mode,我第一时间想起了通过去掉虚拟节点提高加载速度的svelte,但是又因为太懒了所以一直没能下得了决心去看svelte的源码,而AI时代的工具DeepWiki正好解决了这个痛点,只要打开github的仓库地址并把github换成deepwiki就能得到一个阅读过代码、写好文章并能回答你任何问题的ai了。

image.png deepwiki的左边是整体菜单,中间正文,右侧是子标题,最底下有一个提问框,还是挺容易上手,如果感觉所有的文章看下来太花时间,也可以直接拿着自己想弄明白的问题去提问。
同时为了节省阅读时间,我会用沉浸式翻译帮我把页面内容翻译成中文。

符文系统(Rune System)

跳过最前面的仓库结构介绍等内容,最先看到的源码是符文系统(Rune System),介绍说符文系统是Svelte 5核心响应式机制,这个机制具体有哪些作用呢,往下翻到第一个流程图,看到stateeffectprops时应该会有强烈的既视感了,我们可以用符文系统来实现数据的双向绑定、管理生命周期/副作用和组件通信了。同时对编译过后的符文系统代码的分析也是本文的重点:Svelte是怎么做到高效地直接操作DOM的? image.png

$state

从使用姿势来看$state是响应式状态,而Source感觉和mobxAtoms很像,都是用于判断状态的更新并通知观察者。 image.png 那么$state相较于虚拟节点的方案是怎么直接操作DOM的呢?我选择了询问deepwiki并得到了如下回答: image.png
概括一下就是$state收集依赖并在自身被更新时通知依赖进行更新,并更新DOM,很经典的观察者模式,但是每个依赖都独立进行DOM更新,其中$state相对于虚拟节点的不同点也算清楚了: image.png
那么细粒度更新会是银弹么,我不太相信,所以又去问了deepwiki,它也给了我一个相对可靠的回复,虚拟节点在一次性更新大量页面元素、复杂条件渲染的情况下更占优势,Svelte的编译时优化放到大型项目里可能就变成了编译时负担: image.png