鱼跃(跟着编程导航学的一个AI零代码平台项目)
《YU-AI-CODE:企业级AI代码生成平台开发实战》是一套基于SpringBoot3+LangChain4j+Vue3的完整项目教程,已在GitHub开源。该项目具备四大核心能力:1)智能代码生成,通过流式输出实现需求到代码的实时转换;2)可视化编辑,支持网页元素交互式修改;3)一键部署分享,提供云端部署与源码下载;4)企业级管理后台,包含用户管理、应用审核和系统监控功能。教程特别针对版本对比
鱼跃
介绍
编程导航项目教程
这是一套以 AI 开发实战 + 后端架构设计 为核心的项目教程,基于 Spring Boot 3 + LangChain4j + Vue 3 开发对标大厂的 企业级 AI 代码生成平台.目前已经在github上发布
github
https://github.com/pengyuyanITYU/YU-AI-CODE.git
技术选型

四大核心能力
(1)智能代码生成
用户输入需求描述,AI 自动分析并选择合适的生成策略,通过工具调用生成代码文件,采用流式输出让用户实时看到 AI 的执行过程。

(2)可视化编辑
生成的应用将实时展示,可以进入编辑模式,自由选择网页元素并且和 AI 对话来快速修改页面,直到满意为止。


(3)一键部署分享
可以将生成的应用一键部署到云端并自动截取封面图,获得可访问的地址进行分享,同时支持完整项目源码下载。
预览
通过springBoot接口实现一个静态资源服务接口。
> 虽然无需额外进程,更加方便,但是功能相对比较简单,性能低,不如专业的WEB服务器

部署
通过修改nginx配置来映射资源路径实现
> 功能相对更加丰富,性能更好

部署后的项目会调用Selenium实现异步自动截图
(4)企业级管理
提供用户管理、应用管理、系统监控、业务指标监控等后台功能,管理员可以设置精选应用、监控 AI 调用情况和系统性能。
用户管理
管理员可以逻辑删除用户,数据仍然在数据库,避免用户信息丢失

应用管理
管理员可以精选或者删除应用

系统监控
可以用ARMS来监控系统运行状况,也可以通过Prometheus来监控和grafana提供可视化来实现.但是得人工埋雷

扩展
应用版本化管理
用户可以随时回退到历史版本,并且可以不同版本之间的差异


实现方案
后端不做复杂数据处理,返回两个对比的版本内容。主要是前端得配置vite-plugin-monaco-editor来处理Monaco的Worker文件加载
踩过的坑
版本化管理对比关闭时的死机
版本对比功能使用了 **Monaco Editor**(就是 VS Code 用的那个编辑器),这是一个非常强大但也很"重"的组件。当你关闭对比弹窗时,系统需要销毁所有的编辑器实例和文本模型,这个过程非常耗时,会阻塞主线程,导致界面卡死。
解决方案
1. 延迟销毁 (Deferred Disposal)
const disposeAllEditors = () => {
// 先把引用保存下来
const editorsToDispose = Array.from(editorInstances.values())
const modelsToDispose = [...models]
// 立即清空引用(让弹窗可以马上关闭)
editorInstances.clear()
models.length = 0
// 延迟到下一个事件循环再销毁(不阻塞UI)
•
setTimeout(() => {
•
editorsToDispose.forEach(e => e.dispose())
•
modelsToDispose.forEach(m => m.dispose())
•
}, 0)
•
}
核心思路:
-
关闭弹窗时,先清空所有引用,让界面立即响应
-
把真正的销毁工作放到*setTimeout(..., 0)*里,这样会在下一个事件循环执行
-
用户感觉弹窗立即关闭了,实际上清理工作在后台异步进行
2. 移除 Vue 响应式开销
// 之前(有响应式开销):
•
const editorInstances = ref(new Map())
•
const models = ref([])
•
// 现在(纯 JS 对象):
•
const editorInstances = new Map()
•
const models = []
Monaco Editor 实例和模型是大对象,不需要 Vue 的响应式追踪。移除 ref** 后,减少了大量不必要的性能开销**
3. 手风琴模式 + 即时销毁
<a-collapse accordion destroyInactivePanel>
-
accordion: 一次只能展开一个文件
-
destroyInactivePanel: 折叠时立即销毁 DOM
-
配合watch(activeKeys)监听,切换时立即销毁旧编辑器
4. 强制组件销毁
<AppVersionDiff v-if="diffVisible" ... />
使用 v-if** 而不是 v-show,确保关闭时整个组件从 DOM 中移除并销毁。**
效果
流程:
-
点击关闭按钮 → 弹窗立即消失 ✅
-
后台异步清理 Monaco 资源(用户无感知) ✅
-
内存正常释放,不会累积 ✅
更多推荐





所有评论(0)