# lowcode-create 内存问题修复记录(2026-04) ## 背景 反馈:`@lingshu/lowcode-create` 在长会话中存在"内存泄漏"现象。系统排查后判定**真泄漏 1 处 + 高频 GC 抖动 2 处**,本次三处都已修。`apps/lcdp` 通过 catalog 版本 `@lingshu/lowcode-create@1.0.8` 从内部 nexus 装包,三处修复的源码与本地 `dist/` 已同步落地,**正式生效需要 bump 版本并发包**。 --- ## 修复清单 ### #1 codeProtocol 不销毁导致的 Sandbox watch 泄漏(真泄漏) **文件**:`packages/lowcode-create/src/composables/FeFormCreate.tsx` **症状**: `useLowCodeFormCreate` 在内部构造 `SandBox`(含 `effectScope`),通过 `codeProtocol.destroy()` 释放。但销毁责任在 caller,实际 4 个调用点中只有 `PreviewForm.vue` 显式 destroy,其余 3 个(`DesignerForm.vue`、`DesignerFormRenderMobile.vue`、`PreviewFormRenderMobile.vue`、`apps/lcdp/.../vant/index.vue`)都不销毁。每次 host 卸载,sandbox 内通过 `onFormDataChange`/`onFieldChange` 注册的 watch 闭包(持有旧 formApi、formState)都会留存;切页 / 弹窗反复打开时叠加。 **改动**: 在 `codeProtocol` 创建后,自动挂到 caller 的 effect scope: ```ts import { getCurrentScope, onScopeDispose, unref } from "vue"; // ...创建 codeProtocol 之后 if (getCurrentScope()) { onScopeDispose(() => codeProtocol.destroy()); } ``` **为什么安全**: - `effectScope.stop()` 是幂等的,`PreviewForm.vue` 现有的显式 destroy 不会出错。 - `getCurrentScope()` 只有在 Vue setup 上下文里才返回 scope,非 Vue 调用方不受影响。 - `useLowCodeFormCreate` 几乎都是在 `