planP4E2partial2026-10-19

锁定Mermaid浏览器产物本地提供

证据与决策

有界诊断表明客户端转换阶段已超内存,Mermaid及传递依赖参与大解析图;不是唯一根因结论。官方用法文档支持浏览器直接导入mermaid.esm.min.mjs。此处仅采用安装锁中现有11.17.2文件,不采用文档中的动态最新版或外部CDN。

定稿实现

predev/prebuild新增同步步骤,从锁定node_modules/mermaid复制官方dist/mermaid.esm.min.mjs及chunks/mermaid.esm.min下完整mjs/maps和许可证,至唯一自动生成public/vendor/mermaid目录;该目录加入gitignore及发布脚本生成路径白名单。版本同时核package-lock及实际package.json;不改锁。输出manifest逐文件SHA/字节,失败禁止继续build,不碰archive。版本化URL避免后续缓存串版。MermaidDiagram只改运行时入口,使用withBase与vite-ignore加载本地浏览器ESM;类型仍取原库,initialize参数、render/error、全部图类型和图内容保持。

不删除正文、归档或搜索,不将依赖外置到CDN,不改Three/MathJax、buildConcurrency或堆大小。复杂度O(分发文件字节),串行同步一次,预期≤2秒、RSS≤128MiB、新增磁盘≤32MiB;每次固定≤256文件/≤32MiB,拒绝symlink/越界路径。复制生成目录可重建,不清原证据。

匹配验证与停止条件

  1. 同步脚本核真实锁版、完整复制SHA、相对ESM引用闭包及许可证;浏览器实际渲染现有全部图类型的代表,核无外部模块请求、无加载错误。离线解析不冒充渲染。
  2. 一次新常规npm run build,Node24/1024MiB堆、180秒/1536MiB聚合RSS/32进程门不变;源SHA稳定、0错误/0死链。对比前次5.157秒超RSS(未完成)及新完成时长/CPU/RSS/进程/输出;失败不能称优化完成,不继续无证据试参数。
  3. 若通过,最终文档提交后由生产脚本对干净同SHA源一次构建发布;若认证缺失,保留本地通过产物及partial状态,不能称已线上发布。当前28/66,不开磁盘。

Implementation / Validation Update · 2026-10-19

浏览器分发同步209文件/16,613,399B,实际锁11.17.2;独立AST遍历104个ESM、923个相对引用全闭包,逐文件原件SHA核同,许可证保留。尚未浏览器渲染。一次常规构建7.179秒/CPU17.405秒触聚合RSS1,635,876,864B门,一次SIGTERM、无强杀;Node构建1,442,660,352B、npm70,549,504B、esbuild122,667,008B。源1405文件/37,739,615B核同(此清单含209个自动生成vendor文件,不能当纯源规模)。837个部分输出不是完整构建。此改动单独未通过整站门;不继续调整Mermaid参数。

Recovery Plan · 2026-10-19 · Git元数据先完成再编译

诊断的确定机制是564个Markdown已进入渲染但全部等待有界Git,Git限制子进程并没有限制保留已渲染页面的异步栈。现有transformPageData在md.render之后才等待Git,导致元数据排队与编译图同时驻留。这是已确认等待机制,不是对所有内存的唯一归因。

下一最小改动:保持同一个readLastUpdated缓存与4并发,在Vite buildStart前置完成实际pages的Git读取,然后再开始Markdown编译。客户端和服务端复用同缓存;不会二次查询,不改变false/Date/无历史的最终展示。预取只处理真实pages,最多4096,路径安全门沿用;buildStart失败即终止,不吞异常或假日期。O(P)查询、4并发、额外只保留原本已有的P个小Promise/数字,预计2–8秒(从编译阶段前移),最坏每查询5秒并仍受整体180秒守卫。预取不保存Markdown/HTML/AST,也不读取正文。真实编译在预取后不再等待未完成Git。

验证增加冷预取/热消费只读一次、两buildStart复用、失败拒绝和页数上限的窄控制,再一次新独占常规构建,同1536MiB/1024MiB/180秒/32进程预算。保留前述全部失败;若此路线失败,不将预取成功当整站成功,停止该路线,先重新定位剩余内存。原Mermaid浏览器渲染与发布核对门继续保留。

Validation Update · 2026-10-19 · 预取未解决整站内存

6控制通过(128.4ms);新常规构建7.877秒/CPU16.819秒,聚合1,615,052,800B超原门,一次SIGTERM、无强杀。峰值Node构建1,428,717,568B、npm69,533,696B、esbuild116,801,536B;源1196文件/21,093,622B(本次排除vendor自动文件)稳定,仍837个部分输出。Git预取本身没有关闭整站门;停止该修复路线,不继续猜测模块或参数。需保留所有失败,进一步定位真实保留分配,再决定保留或撤回尚未证明价值的改动。

Isolation Update · 2026-10-19

候选未完成整站构建与浏览器门,隔离审计分支codex/site-memory-diagnostic-20261019,main仅保留记录,不启用本页候选改动。最终失败与恢复边界见最终记录。