常见问题
关于学习曲线、chunk 数量、vDOM、浏览器支持与取舍。
01Qwik 难学吗?#
语法与 JSX、hooks 的体验接近其他响应式框架,差异主要在 SSR 优先的心智模型:区分 useTask$ 与 useVisibleTask$,理解 $ 是序列化边界。这些规则在写代码时会给出明确反馈,比水合不一致的运行时错误更容易排查。
02为什么到处都是 $?#
$ 标记懒加载边界。Optimizer 把函数移到独立模块,并在原地留下 QRL。组件、任务、事件处理器因此可以单独下载与执行。它不是 jQuery,也不是模板语法。
03按交互懒加载会不会更慢?#
Qwik 在启动时就预测并预取可能触发的代码,多数情况下首次点击时代码已经在缓存里。真正拖慢交互的是启动时执行大量用不到的代码,而这正是可恢复架构避免的部分。
04会产生太多 chunk 吗?#
开发模式尽量细拆,方便调试。生产构建会把相关符号合并成合理的 bundle,在请求数与缓存命中之间取平衡。
05Qwik 用虚拟 DOM 吗?#
大多数更新不经过 vDOM:signal 直接更新对应的文本或属性。只有结构变化(例如条件渲染换成另一种元素)时才使用 vNode 树,而且不会重新执行 hooks。
06可以做 SPA 吗?#
可以,而且可以按链接选择。<Link> 触发 SPA 导航,普通 <a> 就是整页跳转。架构不再是非此即彼的选择。
07和岛屿架构、局部水合有什么区别?#
岛屿架构需要手动圈出交互区域,岛与岛之间难以共享状态。Qwik 不水合任何组件,而是从整页序列化状态恢复,交互区域自动按需加载,彼此仍能通过 signal 与 context 通信。
08HTML 里会不会序列化太多数据?#
只序列化当前页面真正用到的状态。页面有一千个组件但只有一个可交互,数据量取决于交互复杂度,而不是组件数量。
09浏览器支持如何?#
Qwik 构建在 Vite 之上,面向现代浏览器。具体范围与 Vite 的浏览器兼容目标一致。
10代价是什么?#
需要学习异步 $ 语法与序列化规则;生态相对年轻,个别库需要 qwikify$ 适配;某些 SSR 与响应式性能仍在持续优化。换来的是应用规模增长时启动成本基本不变。