Node.js 做 OpenAI 流式输出的 SSE 实践
SSE 流式输出 这件事在 2023 年开始越来越频繁地进入真实项目,但很多团队一开始只看到表面收益,没有先把边界收住。只要 模型在持续吐 token,但服务端和前端没有把连接生命周期管理清楚,问题就会很快从“一个小体验瑕疵”变成系统性的维护成本。
SSE 流式输出 这件事在 2023 年开始越来越频繁地进入真实项目,但很多团队一开始只看到表面收益,没有先把边界收住。只要 模型在持续吐 token,但服务端和前端没有把连接生命周期管理清楚,问题就会很快从“一个小体验瑕疵”变成系统性的维护成本。
token 预算控制 这件事在 2023 年开始越来越频繁地进入真实项目,但很多团队一开始只看到表面收益,没有先把边界收住。只要 一次请求看起来不贵,但并发一上来以后成本会被放大,问题就会很快从“一个小体验瑕疵”变成系统性的维护成本。
很多团队做 Node.js 镜像优化时,第一目标总是“更小”。这当然没错,但我越来越觉得,真正值得优先守住的其实是运行时镜像的安全基线。镜像小只是结果,基础不稳的小镜像一样会给线上留下很多风险。
容器化到 2022 年已经是很普遍的工程实践了,但很多团队在真正上线 Node.js 服务时,还是会遇到一个很现实的问题:镜像能打出来,但体积太大、构建太慢、部署不够干净。
Docker 构建 Node.js 项目时,最直观的痛点往往是“为什么又重新装了一遍依赖”。项目越大、CI 越频繁,这个问题就越明显。很多时候不是 Docker 慢,而是依赖缓存命中条件没有设计好。
Next.js 13 的 Route Handler 出来之后,很多人会自然地想到一个方向:既然前端项目里也能写接口,是不是可以把 BFF 这一层直接揉进去?我觉得答案不是简单的“可以”或“不可以”,关键还是边界。
2022 年工程化领域很明显的一个趋势,是越来越多团队开始认真看 monorepo。前后端、组件库、脚本工具、共享类型都在一个仓库里管理,这种方式开始从“大厂专属”变成普通团队也会考虑的选择。
当仓库开始拆成多个应用和共享包之后,很多命令如果还按单仓库思路跑,就会越来越笨重。一次改了前端页面,却要把整个 monorepo 的所有包都 lint、test、build 一遍,这种开销很快就会把研发节奏拖慢。
很多团队第一次把项目迁进 pnpm workspace,最先感受到的是安装速度和依赖管理变舒服了。但真正决定 monorepo 能不能长期跑下去的,不是工具本身,而是包边界到底收得稳不稳。
很多人拿 Prisma 和 Sequelize 做比较时,最先想到的是语法风格。但如果团队已经大量使用 TypeScript,真正影响开发手感的,往往是类型反馈的质量,而不是 API 看上去像不像 SQL。