← 全栈开发:从入门到入土
全栈开发全栈开发:从入门到入土

长跑:性能预算、安全习惯、维护节奏,以及与 Agent 共事

Zero to Depth 系列第 8 篇:比上线活得更久的那些纪律——作为预算的性能、Shai-Hulud 之后的供应链安全、依赖维护,以及人与 Agent 的协作方式。

性能安全维护AI CodingAGENTS.md职业发展

上线是一天,代码库是十年。前七篇把你送进生产环境;这最后一篇讲的是如何在那里保持神志清醒——因为活下来的系统从来不是架构最聪明的那些,而是主人在它们周围建立起了一套小而无聊的习惯的那些。收官的四个习惯:作为预算的性能、作为日常的安全、作为节奏的维护,以及与如今承包了大部分初稿的 Agent 之间的工作关系。

性能是预算,不是冲刺

当性能工作是一年一度的恐慌(“网站感觉变慢了,谁来优化一下”)时它会失败;当它是一个有人被允许据此说“不”的数字时它才有效。2026 年的目标稳定且公开:LCP ≤ 2.5 s,INP ≤ 200 ms,CLS ≤ 0.1——在真实用户身上测量(第 7 篇的 RUM),而不是在你的笔记本上。

具体做法:给每个路由定一份资源预算——HTML、CSS、JS、字体、图片,各有上限——并在 CI(bundle 体积检查)和 code review 里执行。大多数超预算的页面并不是什么工程谜题:不过是一张没人压缩过的头图、一个没人裁剪过的字体、一个只为一个函数引进的依赖。解法就是第 2 篇和第 4 篇的工具箱:AVIF、content-visibility、孤岛优于整页 hydration、平台 API 优于第三方库。预算先行,持续测量,永远不要英雄主义。

安全是习惯——供应链醒了

老的清单依然有效——校验输入(第 5 篇)、用 Argon2 做哈希、配好安全响应头、轮换密钥。但 2025–2026 年新增了一章,每个全栈开发者现在都必须叫得出名字:Shai-Hulud,第一个自我复制的 npm 蠕虫(2025 年 9 月,500+ 个包被盗取维护者 token;v2 波及 796 个包、月下载量 1.32 亿),随后是 2026 年春天的 Mini Shai-Hulud——它用偷来的 OIDC token 伪造了有效的 SLSA 来源证明,攻陷了 TanStack 的发布和两台 OpenAI 员工的笔记本。Axios 事件(周下载量 7000 万)则用一个 postinstall 脚本投递了 RAT。Snyk 统计供应链攻击同比增长 38%。

这个教训让人不舒服:来源证明是信号,不是证据,而“我装的是最新版”本身已经变成了攻击向量。真正顶用的防御,按投入排序:

  1. 发布冷静期 —— 拒绝安装最近 24 小时到 7 天内发布的版本。大多数投毒版本在几小时内就会被发现下架;等一拍,你就站在了爆炸半径之外。pnpm 11 把 minimumReleaseAge 默认设为一天;npm 在 v11.10 加入了 min-release-age;Renovate 和 Dependabot 有同款开关。这是本节里性价比最高的一个设置。
  2. 不信任的安装脚本一律不跑 —— “安装”和“执行”是两回事;默认 --ignore-scripts,白名单放行真正需要构建的包(pnpm 开箱即是如此)。
  3. 锁定不可变引用 —— GitHub Actions 按 commit SHA 锁定,Docker 镜像按 digest 锁定,其余一律 lockfile 加 npm ci。可变 tag 是会被重写的。
  4. 缩小爆炸半径 —— 用短寿命 OIDC token 取代长期密钥,workflow 权限最小化,不用 pull_request_target 检出 PR 代码,配一条 CODEOWNERS 规则让依赖清单的变更必须经过第二个人。
  5. 检测漏网之鱼 —— 在 CI 里跑行为扫描器(Socket、GuardDog),因为 npm audit 只认识昨天的 CVE。

维护是节奏

不管你动不动它,依赖都会按时间表腐烂;你唯一能选的是维护成本按周分期付款,还是每年一次性还清一笔吓人的巨款。

按周的版本刻意追求无聊:更新机器人(Renovate 或 Dependabot,都配上前面说的冷静期)开出小 PR,第 7 篇的 CI 负责验证,一个人扫一眼 diff,合并。每周二十分钟,让你始终落后最新版一步——在那里,每次更新都小到看得懂、小到回得去。按年的版本——所有东西一次跨四十个大版本,一个拥有自己代号的“迁移专项”——是同样的工时乘上恐惧。

文档值得同样的节奏:README 给人看(怎么跑起来),ADR 记录决策(为什么是这样),以及——2026 年的新增项——给 Agent 看的 AGENTS.md(在这里怎么干活)。

与 Agent 共事的长期主义

第 1 篇讲的 agentic 工作流,在本系列写作期间长出了行业标准。AGENTS.md——一个写给 Agent 的 README,记录构建步骤、约定和测试方法——从 OpenAI 在 2025 年年中的惯例,发展到 60,000+ 个项目采用,并在 2025 年底捐给了 Linux Foundation 旗下的 Agentic AI Foundation;几乎所有工具(Codex、Cursor、Copilot、Gemini CLI、Claude Code)都会读它,CLAUDE.md 文件也越来越多地只是指向它。SKILL.md 包让工作流可以跨 Agent 携带。MCP 则成了给 Agent 接通真实上下文——你的数据库、你的 issue、你的 devtools——的标准管道。

让这一切长期有效、而不只是演示效果的习惯:

  • 指令文件保持精简。 Agent 遵循指令的质量会随指令膨胀而下降——文件里只列安装命令、测试命令,和你真正执行的那五条约定,别的一概不放。本站的 AGENTS.md 就是范例。
  • 测试是 Agent 的护栏,不是你的。 能跑测试套件的 Agent 会自己验证自己的工作(agentic loop);跑不了的 Agent 会自信满满地把东西弄坏。第 7 篇的 CI 流水线,正是让 Agent 的产出可以被快速 review 的前提。
  • 你的岗位挪了位置,但没有消失。 规格、架构、安全审查、品味——第 1 篇那个 29% 的信任数字不是要解决的问题,而是岗位描述。你合并的代码,你负责。
  • 触碰高风险领域就要盯紧监管日历。 欧盟 AI 法案的全部义务在 2026 年 8 月落地——日志、可追溯性和人类监督要求,第 7 篇的可观测性栈已经满足了一半。

一年以后再看这张图

系列到此完结,最诚实的收尾建议是:十二个月后重读第 1 篇。版本号会动——Node 27 会成为 LTS,React 会再发一个 minor,这些页面里的某个工具会出现继任者——但形状不会变:一切之下的平台、一个组件模型、一个元框架、一道带校验的边界、一个有物理约束的数据库、一条带回滚的流水线,以及习惯大于英雄主义。2026 年的全栈不是把这些背下来,而是知道它们存在、知道按什么顺序学、知道去哪里查——带上版本号。

毕业练习

一个项目,端到端,小但要真实:

  1. 一个内容加 API 的应用,带一个交互孤岛,用第 2 篇的平台和你自选的第 3/4 篇框架搭建。
  2. 一道第 5 篇的边界:schema 校验、Better Auth,加上第 6 篇的数据库和 expand-contract 迁移。
  3. 一条第 7 篇的流水线:预览部署、黄金路径上的 OpenTelemetry,以及一次你故意演练过的回滚。
  4. 一份 AGENTS.md、CI 里的性能预算、发布冷静期,以及每周雷打不动的二十分钟更新机器人例会。

然后写下是什么坏了。那篇复盘——发在你自己的网站上,用你现在已经拥有的那套技术栈——才是真正的毕业证书。从入门到入土,土地是开始。

guest@swangnice:~$