Svelte 5 与编译时响应式

共 18 题
#

1. Svelte 5 的 Runes($state/$derived/$effect)与旧版 $: 语法的差异与迁移要点?

A runes 只能写在 .svelte 组件文件中,模块文件不能使用
B 旧版 $: 语法比 runes 更灵活,支持动态创建响应式变量
C $derived 声明派生值,仅在其依赖变化时重新计算 ✓ 正确答案
D 迁移时必须一次性重写所有组件,不能渐进转换
#

2. Svelte 的编译时特性如何实现"无运行时"优势,代价是什么?

A Svelte 组件在运行时依赖虚拟 DOM 进行差异更新
B Svelte 把模板编译为直接操作 DOM 的代码,运行时开销很小 ✓ 正确答案
C Svelte 完全没有任何运行时辅助代码
D 编译时特性对调试体验没有任何影响
#

3. Svelte 5 的七大核心 runes($state/$derived/$effect/$props/$bindable/$mutable/$host)各自的职责?

A $derived 声明的值可以像普通变量一样赋值修改
B $bindable 用于在服务端创建全局可变状态
C $props 用于声明组件的输入属性,解构后保持响应式 ✓ 正确答案
D $host 用于替代 $state 声明普通组件状态
#

4. SvelteKit 的路由、服务端加载与表单操作(form actions)设计?

A load 函数无法访问服务端私密资源
B +page.server.ts 中的 load 函数在浏览器端执行
C form actions 只在启用 JavaScript 时才能工作
D use:enhance 让表单在无 JS 时原生提交、有 JS 时增强为异步提交 ✓ 正确答案
#

5. Svelte 的 store 体系与 runes 的对比,全局状态如何组织?

A runes 无法在 .svelte.js 模块中实现全局共享状态
B 组件模板中使用 $store 语法会自动订阅并在组件销毁时退订 ✓ 正确答案
C store 只能在单个组件文件内定义和使用
D derived store 可以对自身进行赋值修改
#

6. runes 如何在 .svelte.js/.svelte.ts 中实现跨组件响应式逻辑复用(store 替代)?

A .svelte.js 模块中不能使用任何 runes
B runes 只能写在 .svelte 组件文件中
C 模块级 $state 信号可以充当全局共享状态,等价替代 store 单例 ✓ 正确答案
D 模块级信号在 SSR 场景无需考虑请求间隔离
#

7. Svelte 5 的渐进迁移,legacy 模式与 runes 模式共存时的边界?

A legacy 与 runes 模式无法在同一个应用中共存
B 启用 runes 后所有 store 都必须重写为模块信号
C runes 模式下 $: 语法被彻底禁用,无法运行
D 迁移时可以在单个组件内逐步混用新旧语法,最终统一到 runes ✓ 正确答案
#

8. Svelte 5 的 snippets(#snippet 与 @render)替代 slot 的模板复用与类型安全,以及 children 属性传递的边界?

A {@render} 用于定义 snippet,{#snippet} 用于调用渲染
B snippet 定义后只能在组件内渲染一次
C slot 支持向父组件回传渲染参数
D snippet 可以接收参数并在渲染时传入具体值 ✓ 正确答案
#

9. Svelte 编译器的依赖收集机制,编译期如何分析变量赋值与读取生成更新代码,与脏检查/订阅相比的收益?

A Svelte 在运行时对组件树执行脏检查以发现变化
B Svelte 的更新机制与 Angular 一样需要整树扫描
C 编译器分析模板读取与赋值语句,为赋值生成精确的 DOM 更新代码 ✓ 正确答案
D Svelte 的依赖收集发生在浏览器运行时
#

10. Svelte 5 与 React/Vue 响应式实现的本质差异,编译期信号 vs 运行时 proxy,调试体验与性能剖面如何对比?

A React 通过直接修改可变对象实现精确更新
B Svelte 5 运行时依赖虚拟 DOM 做差异更新
C 三者更新粒度与调试工具完全一致
D Vue 的响应式基于运行时 Proxy 代理对象并在读取时收集依赖 ✓ 正确答案
#

11. Svelte 5 的 hydration 与岛屿架构,服务端渲染组件与客户端交互组件如何分层,与 Next.js/Remix 的形态差异?

A Svelte 5 无法做部分水合(islands)
B Next.js 的 "use client" 在运行时决定组件边界
C SvelteKit 默认对整棵组件树进行水合 ✓ 正确答案
D Remix 完全不需要服务端参与渲染
#

12. Svelte 编译产物(无虚拟 DOM)与信号式运行时的性能差异在什么场景可感知?

A 无虚拟 DOM 的实现在任何场景都数倍领先于虚拟 DOM
B 性能差异与使用场景没有任何关系
C Svelte 的首屏产物体积通常比 React 应用更大
D 高频列表更新时,精确 DOM 更新优于 diff 与重建 ✓ 正确答案
#

13. 编译时响应式 vs 运行时响应式,性能与调试差异?

A 运行时响应式的每步读写没有额外开销
B 编译时响应式的调试体验与源码完全一致,无需 sourcemap
C 运行时响应式无法动态创建响应式对象
D 编译时响应式在构建期确定依赖,运行时开销小但动态场景受限 ✓ 正确答案
#

14. Svelte 5 的组件事件与 props,新旧 API 对比?

A createEventDispatcher 是 Svelte 5 推荐的新事件机制
B Svelte 5 使用 $props() 解构声明组件的输入属性 ✓ 正确答案
C 回调 props 无法进行 TypeScript 类型检查
D $props 声明的属性不能设置默认值
#

15. Svelte 5 的过渡与动画,内置指令?

A transition 指令只能用于元素进入动画,离开动画需自己实现
B flip 指令用于列表元素位置变化时的移动动画 ✓ 正确答案
C Svelte 动画必须引入第三方动画库才能实现
D 过渡函数只能使用内置的几种,不能自定义
#

16. Svelte 5 的 SSR 与 islands?

A islands 模式会水合整棵组件树以保证交互完整
B 部分水合可以减少客户端 JS 体积并加快 TTI ✓ 正确答案
C SSR 渲染的输出不包含 HTML 内容
D Svelte 5 只支持全量水合一种模式
#

17. Svelte 5 的 $state 代理语义,数组/Map/class 的深层响应式与 .raw 跳过代理的取舍?

A $state 默认对数组、Map 等容器做深层响应式代理,原生方法调用会被追踪 ✓ 正确答案
B $state.raw 创建的状态同样对内部字段做深层代理
C 数组的索引赋值不会被 $state 追踪
D class 实例总是被深度代理且无法跳过
#

18. Svelte 的过渡动画与微交互实现相比 React/Vue 的优势?

A flip 指令可以实现列表元素位置变化的移动动画 ✓ 正确答案
B Svelte 的过渡动画必须搭配 React 才能使用
C Svelte 没有内置的过渡指令,全部需要手写
D Svelte 动画会阻断响应式更新流程