知行札记
Web 应用架构与工程生态

能力候选与组合条件

按 32 个能力方向比较候选和实际采用条件,保留前端、服务、文档、实时与 AI 的边界。

比较口径

候选由 2026-10-02 归档研究提供,按任务覆盖、整合成本、运行条件、维护与授权比较。本页不复用当时“最推荐”作为全场景排行,也不复用未经本次取得的版本和价目。候选存在于材料中不代表本项目已安装、试用或选定。

表中每个方向对应独立任务。共用 schema、身份、数据与交付规则可以集中维护,用户界面、数据库记录和公开响应仍有不同职责。能力越多不会自动使架构更完整,实际需求决定引入范围。

前端的 17 个方向

方向归档候选条件化选择及主要代价
F1 表单React Hook Form、TanStack Form、Conform、Formik普通 React 表单可考察 RHF;渐进增强和服务器提交考察 Conform;联动与类型需求对照 Form。客户端解析与服务端授权分别保留
F2 表格TanStack Table、AG Grid、MUI DataGrid、Glide自有呈现与 headless 逻辑可考察 TanStack;重内置功能看 AG Grid/MUI;canvas 模型需核对可访问、打印和自动化;商业功能按当前许可
F3 图表Recharts、ECharts、visx、Chart.jsReact 常规图可考察 Recharts;复杂交互看 ECharts;自建视觉看 visx。性能按真实点数、更新和设备测量
F4 富文本Tiptap、Lexical、Slate、Plate、ProseMirrorschema、扩展、转换及协同接口决定采用;编辑器开源核心与商业服务区分,JSON 树仍需内容边界
F5 代码编辑CodeMirror、Monaco、Ace文档内嵌与可组合编辑可考察 CodeMirror;类 IDE 功能看 Monaco;体积、worker、语言资源和宿主条件核对
F6 动效Motion、GSAP、CSS/WAAPI、Lottie、Rive按声明式运动、时间线、资产或交互状态选择;运动偏好和资源释放保留,设计工具授权另核对
F7 拖拽dnd-kit、React DnD、原生拖放可排序 React 交互考察 dnd-kit;输入类型、跨列表、键盘替代和保存语义决定复杂度
F8 虚拟化TanStack Virtual、react-window、Virtuoso自定义布局看 headless,自带组合看较完整方案;动态测量、焦点、查找及打印需要补齐
F9 文件媒体react-dropzone、Uppy、tus、video.js、hls.js选择、传输、续传和播放分工。大文件和弱网采用按恢复要求决定,归档阈值无普适保证
F10 HTTPfetch、axios、ky、ofetch按进度、流、错误与宿主集成选择。查询缓存另由相应层管理,避免多层重试相乘
F11 国际化i18next、next-intl、Lingui、Paraglide多宿主与资源方式、RSC 接线、编译或运行成本决定采用;服务器实例与初始语言需隔离
F12 日期时间原生 Date/Intl、date-fns、Day.js、Luxon、Temporal 相关实现时刻、日历日期和业务时区先定义;实际平台能力及所用插件按版本确认
F13 工具函数原生能力、es-toolkit、Lodash 等比较确实缺失的语义、体积和现有资产;相等、拷贝、防抖按实际对象判断
F14 金额最小单位整数、decimal.js、big.js、Dinero.js固定单位或十进制表示按规则选择;舍入、货币和传输必须一致,不能用浮点 epsilon 补完整保证
F15 状态机React 状态/reducer、Zustand、XState、Jotai按状态来源与转移复杂度选择;图状态、进度、重试具有独立语义时考察显式状态机
F16 Markdownreact-markdown、Shiki、remark/rehype、MDX纯文档与可执行组件分开;HTML、URL、插件和可信源码边界决定安全及构建责任
F17 离线查询持久化、store persist、idb/Dexie、Service Worker缓存恢复与待同步操作不同;schema、配额、驱逐和冲突分别处理

这些候选需要按当前官方文档确认具体 API。例如 shadcn 的 Data Table 指南提供组合方法,不能据名称推断一个已经包含全部能力的成品表格。shadcn Data Table

服务的 10 个方向

方向归档候选条件化选择及主要代价
B1 队列调度BullMQ、pg-boss、Graphile Worker、croner、框架 schedule后台任务选持久执行,进程内定时选本地时序;数据库提交与入队需共同事务或 outbox。jobId 的去重期限随保留策略
B2 缓存cache-manager/Keyv、node-redis、ioredis、本地 LRU按 KV、原子操作和多实例共享需要选择;键、TTL、miss、序列化和失效故障按版本及业务条件
B3 安全框架能力、argon2、jose、CSP/净化和限流工具使用可信身份和效果强制;库只提供部分机制,输入形式、对象授权和解释器风险各自检查
B4 邮件react-email、MJML、模板引擎、Nodemailer、邮件 API模板与发送分开;SMTP/API 按平台与恢复需求选择,提交成功与到达不同
B5 文件图片S3 SDK、sharp、本地或兼容对象存储按对象操作、权限、尺寸与平台选择;元数据与字节没有普通共同事务,需恢复与对账
B6 Office/PDFExcelJS、Papa Parse、pdf-lib、react-pdf、浏览器打印、提取工具生成、解析、浏览和提取分开;字体、布局、公式、格式忠实度及外部资源决定成本
B7 搜索向量PostgreSQL 全文/pgvector、Meilisearch、其他搜索引擎按词法、过滤、排序、向量和运维选择;索引新鲜度与权限传播需要显式条件
B8 支付Stripe、支付宝及 MoR 候选市场准入与合同先核对;可信通知/查询、验签、准确金额和持久幂等建立业务完成,费用本页未确认
B9 授权简单规则、CASL、Casbin、OpenFGA、外部 PDP所有权可用明确查询条件;属性策略看 CASL 等;关系链与独立策略服务需要更多运行与一致性责任
B10 消息服务Nest transport、NATS/JetStream、RabbitMQ、Kafka、gRPC/Connect请求、临时通知与持久事件分开;保存/确认/重投按协议和配置;消费者效果幂等不能只靠事件去重记录

通用的 5 个方向

方向归档候选条件化选择及主要代价
G1 AI 接入原始 SDK、AI SDK、LangChain.js 等简单调用保持接口清楚;结构化流、工具和工作流按需求选择。模型任务质量另需评测,成本按当时计价
G2 实时WebSocket、SSE、Socket.IO、托管消息服务单向推送和双向通信分开;重连、版本、认证和多实例广播都要明确,socket 连接不代表状态已同步
G3 协同Yjs、Automerge、Hocuspocus、托管协同按合并规则、持久存储、权限和离线要求选择;presence 与永久文档状态分开
G4 地图Leaflet、MapLibre GL、服务商地图按瓦片/矢量、坐标、图层和设备选择;SDK 授权与底图/API 授权分别确认
G5 测试数据Faker、属性生成、固定 fixture、Testcontainers生成数据需可复核种子与规则;真实依赖容器需就绪、隔离和版本,替身覆盖范围明确

审校改变了哪些采用判断

原手册把“官方 API”“团队约定”和“可直接复制”同时放入条款,部分保证超出证据。本页采用如下限定:

  • Express/Multer 上传与 Fastify 需要分别接线,上传迁移包含适配器、插件、流和限制。
  • 同一 Redis key 尚存在的队列去重不能推出长期业务效果幂等。
  • DB 提交后裸入队留下未保存发布意图的失败间隙;同存储事务或 outbox 保留这份意图。
  • 已合法 JSON 编辑树仍需要限制 URL、扩展属性及 HTML 输出;对象形状没有保证所有解释器安全。
  • 缓存多 store、Query 卸载取消、Turborepo 任务顺序与类型剥离均按实际接口解释,名称不能代替行为。
  • startsWith 域名白名单与浮点金额补丁无法承担所声称保证,改用实际解析与准确表示。

上述修正来自真实接口、条件推演和正文检查,没有声称本次运行所有候选库。能力选择仍需在目标版本下取得其决定性证据。

最后更新于

本页目录