Svelte 5 发布也有一段时间了,我存量项目太多,迁移一个项目至少要半小时起步,于是就打算先缓缓。
同时我也发现了不少 Svelte 5 难用的地方,比如它实打实地在一些小的地方更繁琐了,没得洗。
就好比,要求你每个 python 项目都必须 fully typed 才能运行,这显然是在小项目上降低了开发效率的。Python 加类型还能让 LLM 来完成,但是就我的体验来看,现在 LLM 自动补全 Svelte 5 的用法 完完全全 都是错的。完全是 hallucination。
所以,当我写 Svelte 5 代码的时候,我好像回到了两年前,没有 Copilot 的时代。
昨天提了一个问题,如何实现自动 infer 组件传给调用者的 slot 的参数的类型 sveltejs/svelte/discussions/14521,维护者告诉我没有好办法。我承认像 React 那样用 typescript 的 spread 等方法来参数化组件是好办法,而且是维护大的项目的必经之路,但是在小项目(特别是对于我这种小项目巨多的人)来说就很难受了。在 Python 中这是一个 Tab 的事情,但在 Svelte 5 中,我要花 10 倍的时间。
曾经,我在反思,为什么我比起(自称)性能更佳的 SolidJs 我更喜欢 Svelte,答案是它的开发体验。它的开发效率。现在这层光环没了,我很失望。
With more and more people building more and bigger applications with Svelte, the limitations of some of our original design decisions started to become more apparent. For example, in Svelte 4, reactivity is driven entirely by the compiler. If you change a single property of a reactive object in Svelte 4, the entire object is invalidated, because that’s all the compiler can realistically do. Meanwhile, other frameworks have adopted fine-grained reactivity based on signals, leapfrogging Svelte’s performance.
Svelte 原本采用的是我尤其欣赏的“即使编译器不够好,但是我仍然不让你写一点 React 一般的 boilerplate”这样的执着。它可能不是最快的,但它是最有想法的(正如我对我自己的要求一样)。所以它不仅是我趁手的兵器,更是我的座右铭一般的存在(和 Rust 在我心目中的地位平起平坐)。现在感觉被它被刺了一刀 哈哈哈
我曾经四处向人推荐 Svelte,现在只想无条件推荐 Svelte 4 了,至少我本人更喜欢 Svelte 4 的精神
当然,现在这样的发展也证明了当今技术的发展还没能让编译器聪明到这种程度,Svelte<5 算是一种尝试,现在他们决定 move on 了。getting over it 了,也不错。我可能也不会在怀旧服待太久吧。
最后重申一下,我的观点是,Svelte 5 绝对在效率、上限上都是比 Svelte 4 高的。唯一可惜的是,门槛提高了,另一方面编码效率一定程度下降了,尤其小项目的编码效率大幅度下降。