CHAPTER 15 · 附录
术语表与学习计划
这一章是工具箱:一份可以随时查阅的术语对照表,一份把全书串起来的 8 周计划,以及一份检验自己是否真正掌握的能力清单。
术语对照表
按领域分组。“章节”列指向首次详细解释该术语的地方。和 Agent 沟通时,中英文术语都可以使用——模型对两者都理解,但英文术语在搜索文档和报错信息时更有用。
语言与运行时
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 运行时 | Runtime | 执行 JS 并提供宿主 API 的环境:浏览器、Node、Bun、Deno、workerd | 01 |
| 类型擦除 | Type erasure | TS 类型只在编译期存在,运行时完全消失 | 01 / 04 |
| 类型剥离 | Type stripping | 只删除类型标注、不做类型检查的转译方式(Node 内置) | 01 |
| 打包器 | Bundler | 合并、摇树、分割、压缩代码的工具:Vite / Rolldown、Turbopack | 01 |
| 摇树 | Tree shaking | 删除未被使用的导出代码 | 01 |
| 锁文件 | Lockfile | 记录依赖确切版本的文件,保证可复现安装 | 01 / 02 |
| 事件循环 | Event loop | 同步代码 → 清空微任务 → 取一个宏任务,循环往复 | 03 |
| 微任务 / 宏任务 | Microtask / Task (macrotask) | Promise 回调 / 计时器、I/O、事件回调 | 03 |
| 漂浮的 Promise | Floating promise | 没有被 await 或处理的 Promise,错误会被吞掉 | 03 |
| 闭包 | Closure | 函数记住其创建时作用域中的变量 | 03 |
| 不可变更新 | Immutable update | 创建新对象 / 数组而不是修改原值 | 03 / 06 |
| ES 模块 / CommonJS | ESM / CJS | 现代的 import/export / 旧的 require 模块系统 | 03 |
类型系统
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 结构化类型 | Structural typing | 按形状判断兼容性,而不是按声明关系 | 04 |
| 联合类型 | Union type | A | B:值可能是其中任意一种 | 04 |
| 类型收窄 | Narrowing | 编译器根据判断语句在不同位置给出更精确的类型 | 04 |
| 判别联合 | Discriminated union | 用共同的字面量字段区分多种形状 | 04 |
| 穷尽检查 | Exhaustiveness check | 用 never 确保所有分支都被处理 | 04 |
| 泛型 | Generics | 对待定类型保持通用并保留类型信息 | 04 |
| 类型断言 | Type assertion (as) | 告诉编译器“相信我”,不做任何检查 | 04 |
| 运行时校验 | Runtime validation | 用 Zod 等在边界检查真实数据 | 04 |
| 单一事实来源 | Single source of truth | 只定义一次,其余全部推导 | 04 / 08 |
Web 与前端
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 同源策略 / 跨源资源共享 | Same-origin policy / CORS | 浏览器限制跨源读取;服务器通过响应头声明豁免 | 05 |
| 预检请求 | Preflight request | 跨源非简单请求前的 OPTIONS 确认 | 05 |
| 跨站脚本 / 跨站请求伪造 | XSS / CSRF | 注入脚本执行 / 借用户 Cookie 发起请求 | 05 |
| 文档对象模型 | DOM | 浏览器中表示页面的对象树 | 05 |
| 可访问性 | Accessibility (a11y) | 让键盘、屏幕阅读器等方式都能使用界面 | 05 |
| 响应式断点 | Responsive breakpoint | 按屏幕宽度切换布局的阈值 | 05 |
| 组件 / 属性 / 状态 | Component / Props / State | 返回界面的函数 / 父传子的只读参数 / React 保管的数据 | 06 |
| 协调 / 比对 | Reconciliation | 比较新旧元素树,计算最小的 DOM 变更 | 06 |
| 提升状态 | Lifting state up | 把共享状态移到最近的共同父组件 | 06 |
| 派生状态 | Derived state | 能从其他数据算出的值,不应单独存储 | 06 |
| 副作用 / 清理函数 | Effect / Cleanup | 渲染后与外部系统同步 / 撤销上一次同步 | 06 |
| 受控 / 非受控输入 | Controlled / Uncontrolled input | 值由 state 驱动 / 由浏览器保存 | 06 |
| 乐观更新 | Optimistic update | 服务器确认前先显示预期结果,失败再回滚 | 06 |
| 服务器状态 | Server state | 远端数据的本地缓存(TanStack Query 管理的对象) | 06 |
| 防抖 / 节流 | Debounce / Throttle | 停止触发一段时间后才执行 / 限制执行频率 | 06 |
渲染与全栈
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 客户端 / 服务端渲染 | CSR / SSR | HTML 在浏览器 / 服务器生成 | 07 |
| 静态生成 / 增量静态再生 | SSG / ISR | 构建时生成 / 生成后缓存并定期更新 | 07 |
| 流式渲染 | Streaming SSR | 先发外壳,慢的部分随后流入 | 07 |
| 水合 | Hydration | 客户端复用服务器 HTML 并绑定事件 | 07 |
| 服务器组件 / 客户端组件 | Server / Client Components (RSC) | 只在服务器存在 / 代码发送到浏览器 | 07 |
| 服务器函数 | Server Function / Server Action | 可从客户端调用、在服务器执行的函数(本质是网络端点) | 07 |
| 请求瀑布 | Request waterfall | 本可并行的请求被串行执行 | 03 / 07 |
| 元框架 | Meta-framework | 在 UI 库之上提供路由、渲染、数据加载的全栈框架 | 01 / 07 |
| 端到端类型安全 | End-to-end type safety | 类型从数据库一路推导到界面 | 08 |
| 迁移 | Migration | 对数据库结构的版本化变更 | 08 |
| 认证 / 授权 | Authentication / Authorization | 你是谁 / 你能做什么 | 08 |
| 不安全的直接对象引用 | IDOR | 只校验登录,未校验资源归属 | 08 |
| 幂等 | Idempotency | 重复执行不产生重复效果 | 08 |
| 指数退避 | Exponential backoff | 失败后等待时间成倍增长再重试 | 08 |
| 死信队列 | Dead-letter queue (DLQ) | 多次失败的消息的隔离区 | 14 |
部署与工程化
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 无服务器 | Serverless | 按需启动实例、按用量计费、无需管理服务器 | 09 |
| 边缘计算 | Edge computing | 在离用户最近的节点执行代码 | 09 |
| 冷启动 | Cold start | 新实例首次处理请求时的启动延迟 | 09 |
| 隔离沙箱 | V8 isolate | 比容器更轻量的执行隔离单元(Cloudflare Workers) | 09 |
| 绑定 | Binding | 通过 env 注入给 Worker 的资源 | 09 |
| 预览部署 | Preview deployment | 每个 PR 自动生成的独立环境 | 09 |
| 完成定义 | Definition of Done | 任务被视为完成需满足的检查清单 | 10 |
| 端到端测试 | E2E test | 用真实浏览器模拟用户操作的测试 | 10 |
| 持续集成 | CI | 每次提交自动运行检查 | 10 |
| 可观测性 | Observability | 日志、指标、追踪,用于了解线上系统状态 | 10 |
AI 与 Agent
| 中文 | English | 一句话解释 | 章节 |
|---|---|---|---|
| 词元 | Token | 模型处理和计费的文本单位 | 11 |
| 上下文窗口 | Context window | 单次请求可容纳的 token 上限 | 11 |
| 首 token 时间 | Time to first token (TTFT) | 从请求到第一个 token 到达的时间 | 11 |
| 结构化输出 | Structured output | 按 schema 约束模型返回 JSON | 11 |
| 工具调用 | Tool calling / Function calling | 模型请求你的代码执行某个函数 | 11 |
| 嵌入向量 | Embedding | 把文本映射为向量,语义相近则距离近 | 11 |
| 检索增强生成 | RAG | 先检索相关资料,再让模型基于它们生成 | 11 |
| 提示缓存 | Prompt caching | 重复的请求前缀以更低成本和延迟处理 | 11 |
| 评估 | Evals | 用样本集和评分规则衡量 AI 功能质量 | 11 |
| 提示注入 | Prompt injection | 数据中夹带指令以劫持模型行为 | 11 |
| 智能体 | Agent | 模型在循环中使用工具直到完成目标 | 12 |
| 挽具 / 外围框架 | Harness | 模型之外的一切:指令、工具、上下文管理、权限、反馈 | 12 |
| 上下文工程 | Context engineering | 决定每一轮上下文中放什么 | 12 |
| 压缩 | Compaction | 把早期上下文总结为摘要以腾出空间 | 12 |
| 子智能体 | Subagent | 拥有独立上下文的子任务执行者 | 12 |
| 模型上下文协议 | MCP | 把工具和数据接入 Agent 宿主的开放协议 | 12 |
| 技能 / 钩子 | Skills / Hooks | 按需加载的专业说明 / 生命周期中确定执行的脚本 | 12 |
| 人在回路 | Human-in-the-loop | 关键步骤需要人确认 | 12 |
| 规格 / 验收标准 | Spec / Acceptance criteria | 描述要做什么以及如何判断完成 | 13 |
| 纵向切片 | Vertical slice | 端到端可运行的最小功能增量 | 13 |
8 周学习计划
按每周 8~10 小时设计。每周都有一个 LinkNote 里程碑——交付一个能跑的东西比读完所有章节更重要。
| 周 | 阅读 | 动手(LinkNote 里程碑) | 本周检验 |
|---|---|---|---|
| 1 | 00、01、02 | 装好环境;跑通 hello.ts;创建 Vite + React 项目;写第一版 AGENTS.md | 能解释 tsc 与 node 运行 .ts 的区别 |
| 2 | 03、04 | 写一个批量抓取网页标题的脚本:并发上限、超时、allSettled;用 Zod 定义 Bookmark 判别联合 | 能预测事件循环输出顺序;代码中没有 any |
| 3 | 05、06 | 用假数据做出列表页:卡片、标签筛选(URL 状态)、空状态、添加表单 | 能说出每一份状态住在哪里、为什么 |
| 4 | 07、08 | 迁移到 Next.js 或 TanStack Start;接入数据库(Drizzle)和登录;实现增删查 | 能画出一次请求经过的层与类型来源;删除接口防 IDOR |
| 5 | 09、10 | 部署上线(任选一个平台);配置 CI;补齐单元测试和一个 E2E 测试 | 有一个公网可访问的地址;PR 上 CI 自动运行 |
| 6 | 11 | 异步摘要生成:队列 + 结构化输出 + 状态更新;流式“问我的收藏”(只读工具) | 建了 20 条样本的评估集;知道单次摘要的成本 |
| 7 | 12、13 | 把“问我的收藏”升级为 Agent;为项目写 Skill 或 Hook;用六要素模板完成一个新功能 | 一个功能从规格到合并,一次完成 |
| 8 | 14,复习 | 为 LinkNote 写一份设计文档(含估算);练习 5 道面试题(对着录音回答) | 能在 45 分钟内讲完 LinkNote 的系统设计 |
计划的正确用法
这是参考节奏,不是必须严格遵守的课表。如果你已经有明确的项目要做,就用自己的项目替代 LinkNote,按同样的顺序推进。最重要的原则只有一条:每周都交付一个能运行的东西,不要连续几周只读不做,也不要花一周时间“搭建完美的学习环境”。
能力自查清单
勾选你能不看资料、用自己的话做到的项目(勾选状态保存在你的浏览器本地)。
原理层(必须)
实践层
官方资源索引
版本变化快,遇到具体 API 时以官方文档为准。也可以把这些链接直接交给 Agent,让它先读文档再写代码。
| 领域 | 资源 |
|---|---|
| JavaScript / Web 平台 | MDN Web Docs |
| TypeScript | typescriptlang.org/docs(Handbook) |
| Node.js | nodejs.org/docs |
| React | react.dev/learn(尤其是 “You Might Not Need an Effect”) |
| Next.js | nextjs.org/docs |
| TanStack(Start / Router / Query) | tanstack.com |
| Vite | vite.dev |
| Tailwind CSS / shadcn/ui | tailwindcss.com/docs · ui.shadcn.com |
| Zod | zod.dev |
| Drizzle ORM | orm.drizzle.team |
| Hono | hono.dev |
| Better Auth | better-auth.com |
| Vercel | vercel.com/docs |
| Cloudflare Workers | developers.cloudflare.com/workers · Agents SDK |
| Vitest / Playwright | vitest.dev · playwright.dev |
| AI SDK | ai-sdk.dev |
| Claude API | platform.claude.com/docs |
| Claude Code | code.claude.com/docs |
| Model Context Protocol | modelcontextprotocol.io |
| pi coding agent | github.com/badlogic/pi-mono |
最后
回到第 00 章的类比:从汇编到面向对象,工程师写的代码变少了,但对“系统如何运作”的理解要求并没有降低,反而扩展到了更高的层次。今天的转换也一样。Agent 会越来越强,但知道要什么、说得清楚、判断得了对错,这三件事始终是你的。
祝你构建出自己想要的东西。