这篇讲 Angular 从 Zone.js 转向 Signals 与无 Zone 变更检测的架构改造。每个前端框架都要回答同一个问题:内存里的数据变了,框架怎么知道哪些像素要更新。React 选了虚拟 DOM 差异比对,Svelte 选编译期 DOM 改写,而近十年来 Angular 的答案最奇怪:它劫持了整个浏览器——你调用 setTimeout、点击按钮、发网络请求,都会被拦下。做这件事的 Zone.js 并不真的知道哪个数据变了、属于哪个组件,它只知道某个异步浏览器 API 跑完了,于是 Angular 只能从根组件开始自上而下遍历整棵组件树,逐个检查每个绑定。新一代 Angular 拆掉猴子补丁与全树扫描,改用 Signals:改动直接把对应模板视图标脏,调度器合并更新,在微任务里只访问这一个组件并直接改写插值文本节点。文章还列出迁移时的三个坑:在类属性上直接赋值在无 Zone 下不会再触发更新,要用 signal;effect 会订阅回调里读到的每一个信号,次要信号要用 untracked 包住;手动订阅 Observable 而不写回 Signal 时视图不会刷新,要用 toSignal 把 RxJS 桥接进响应式图。