新增:Markdown编辑器/数据库优化/安全修复
- Markdown 编辑器:实时预览、PDF 导出、独立查看器 - 数据库优化:动态连接池、查询缓存、Redis Pipeline - 窗口置顶功能 - 文件系统增强:右键菜单、编辑器集成、收藏夹重构 - 安全修复:XSS 防护、路径穿越、HTML 注入 - 代码质量:正则预编译、缓存锁优化、死代码清理
This commit is contained in:
@@ -2,6 +2,144 @@
|
||||
|
||||
> 本文档记录所有技术细节,包括代码重构、构建优化等内部改动
|
||||
|
||||
## [0.3.3] - 2026-03-31
|
||||
|
||||
### 架构新增 🏗️
|
||||
|
||||
#### PDF 导出模块
|
||||
新增 `internal/api/pdf_api.go`,提供两种导出方式:
|
||||
- **chromedp**: 无头浏览器渲染 HTML → PDF,支持完整 CSS 样式
|
||||
- **gofpdf** (`app.go:ExportMarkdownToPDF`): 纯 Go 实现,解析 Markdown 标题/列表/代码块写入 PDF
|
||||
- 前端 `PdfExportButton.vue` 使用 `window.open` + `print()` 浏览器打印方式
|
||||
|
||||
#### Markdown 编辑器
|
||||
新增 `web/src/components/MarkdownEditor.vue` 组件:
|
||||
- textarea 编辑 + MarkdownPreview 实时预览(左右分栏)
|
||||
- 字符/行数统计、Ctrl+S 保存、5 秒防抖自动保存
|
||||
- 支持 `content` prop 和 `v-model:content` 双向绑定
|
||||
- 独立页面 `web/src/views/markdown-editor/index.vue` 和 `web/src/views/MarkdownViewer.vue`
|
||||
|
||||
---
|
||||
|
||||
### 数据库层重构 🗄️
|
||||
|
||||
#### MySQL 连接池 (`internal/dbclient/pool.go`, `pool_config.go`)
|
||||
- 动态扩缩容: `adaptiveScaling()` 基于使用率自动 scaleUp/scaleDown
|
||||
- 健康检查: `enhancedHealthCheck()` 定期 Ping,使用中连接带 100ms 超时
|
||||
- 性能权重: `adaptiveWeights` 基于 Ping 延迟计算,`getOptimalConnection()` 优选
|
||||
- **注意**: `warmUp()` 为空壳实现,未被调用;`OptimizeQuery` 等方法未接入 `sql_exec_service.go` 业务调用
|
||||
|
||||
#### 查询优化器 (`internal/dbclient/query_optimizer.go`, `cache.go`)
|
||||
- 查询缓存: SHA-256 key hash + LRU/LFU 混合驱逐,100MB 内存限制,RLock 读锁优化
|
||||
- 慢查询日志: 超过 100ms 自动记录,最多 1000 条,维护协程定期分析
|
||||
- 正则预编译: 5 个正则从方法内移到包级别 `var` 声明
|
||||
- **注意**: 索引建议框架在但 `analyzeQueryForIndexes` 分析逻辑为占位实现;`extractIndexUsed` 始终返回 `"unknown"`
|
||||
|
||||
#### Redis Pipeline (`internal/dbclient/redis_pipeline.go`)
|
||||
- `RedisPipeline`: 批量命令,使用 go-redis 原生 `Pipeline()` 一次性发送
|
||||
- `RedisTransaction`: 事务支持,使用 `TxPipeline()` 自动 MULTI/EXEC
|
||||
- **注意**: 未被业务代码调用,仅 `pool.go` 中定义了桥接方法
|
||||
|
||||
---
|
||||
|
||||
### 前端变更 🖥️
|
||||
|
||||
#### App.vue
|
||||
- 新增窗口置顶按钮,调用 `WindowToggleAlwaysOnTop` Wails runtime API
|
||||
- 新增 Markdown 编辑器 tab
|
||||
- 禁止 Ctrl+滚轮缩放(`wheel` 事件 passive: false)
|
||||
- 移除 `preloadCommonLanguages()` 预加载(改按需加载)
|
||||
- `lang="ts"` 迁移
|
||||
|
||||
#### 文件系统
|
||||
- `ContextMenu.vue`: 新增新建文件/文件夹菜单项
|
||||
- `FileEditorPanel.vue`: 集成 PDF 导出按钮、Markdown 预览/编辑模式切换
|
||||
- `useFavorites.ts`: 收藏夹置顶功能(`togglePin`/`isPinned`/排序)
|
||||
- `useFilePreview.ts`: Office/CSV 改用本地文件服务器 `fetch` 获取内容
|
||||
- HTML 预览改用 `iframe src` 替代 `srcdoc`(`f28fd70`, `7004c6e`)
|
||||
|
||||
#### 安全修复
|
||||
- `PdfExportButton.vue`: `escapeHtml()` 转义标题、`stripScripts()` 清除 script/iframe/事件处理器
|
||||
- `MarkdownPreview.vue`: `sanitizeHtml()` 清除 script/iframe/form/事件处理器/javascript: 协议
|
||||
- `pdf_api.go`: `filepath.Base()` 防路径穿越、`html.EscapeString()` 防标题 HTML 注入
|
||||
|
||||
#### 配置层
|
||||
- `config.ts`: Wails 绑定加载增加超时保护(最多 30 次重试,约 30 秒)
|
||||
- `config_service.go`: `TestConnection` 简化为直接传 id
|
||||
- `connection_api.go`: 依赖从 `storage` 改为 `service` 包
|
||||
|
||||
#### 样式
|
||||
- `style.css`: 新增 GitHub 风格 `.markdown-body` 样式、Highlight.js 代码高亮样式、`@media print` 打印优化
|
||||
- Tooltip 全局样式覆盖
|
||||
|
||||
---
|
||||
|
||||
### 后端变更 ⚙️
|
||||
|
||||
#### app.go
|
||||
- 新增 `pdfAPI`、`isAlwaysOnTop` 字段
|
||||
- 新增 PDF 导出方法: `ExportPDF`、`ExportMarkdownToPDF`、`SelectPDFSaveDirectory`
|
||||
- `startAutoUpdateCheck` 修复 `config["success"].(bool)` 类型断言,改为 ok 检查
|
||||
- `WindowToggleAlwaysOnTop`: Wails runtime 置顶切换
|
||||
|
||||
#### 其他
|
||||
- `aes.go`: AES 加密模块扩展
|
||||
- `pool.go`: 桥接查询优化器和缓存方法
|
||||
- `connection_service.go`: 增强 `GetConnection` 和 `TestConnection`
|
||||
|
||||
---
|
||||
|
||||
### 依赖变更 📦
|
||||
|
||||
```diff
|
||||
+ github.com/chromedp/cdproto
|
||||
+ github.com/chromedp/chromedp v0.14.2
|
||||
+ github.com/jung-kurt/gofpdf v1.16.2
|
||||
+ github.com/yuin/goldmark v1.8.2
|
||||
+ (间接) chromedp/sysutil, go-json-experiment/json, gobwas/ws, gobwas/pool, gobwas/httphead
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 删除文件 🗑️
|
||||
|
||||
- `claude-progress.txt`, `project-status-analysis.md` — 临时文件
|
||||
- `docs/代码审查/README.md` — 过期文档
|
||||
- `web/src/composables/useLocalStorage.ts` — 未使用
|
||||
- `web/src/utils/fileHelpers.js` — 合并到 fileUtils.js
|
||||
- `web/src/utils/pathHelpers.js` — 合并到 fileUtils.js
|
||||
|
||||
---
|
||||
|
||||
### 死代码清理 🧹
|
||||
|
||||
- `cache.go`: 移除 `CacheStrategy` 枚举、`warmupQueries`/`warmupEnabled` 字段
|
||||
- `redis_pipeline.go`: 移除 `RedisError` 冗余类型
|
||||
- `query_optimizer.go`: 移除 `go analyzeQuery()` 空操作 goroutine、清空 `generateJoinSuggestions`/`generateGroupSuggestions`/`generateInsertSuggestions` 硬编码
|
||||
- `openclaw/api.go`: 清理空 `import ()`
|
||||
- `openclaw/manager.go`: `*context.Context` 指针存储改为空结构体
|
||||
- `markdown-editor/index.vue`: 移除 `console.log('Content changed:', content)`
|
||||
|
||||
---
|
||||
|
||||
### 核心文件变更
|
||||
|
||||
| 文件 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `app.go` | 重构 | +208 行,新增 PDF/OpenClaw/置顶 API |
|
||||
| `internal/api/pdf_api.go` | 新增 | chromedp PDF 导出 |
|
||||
| `internal/dbclient/pool_config.go` | 重构 | +395 行,动态连接池 |
|
||||
| `internal/dbclient/query_optimizer.go` | 新增 | 查询优化器 |
|
||||
| `internal/dbclient/cache.go` | 新增 | 查询缓存 |
|
||||
| `internal/dbclient/redis_pipeline.go` | 新增 | Redis Pipeline/事务 |
|
||||
| `web/src/components/MarkdownEditor.vue` | 新增 | Markdown 编辑器组件 |
|
||||
| `web/src/components/PdfExportButton.vue` | 新增 | PDF 导出按钮 |
|
||||
| `web/src/components/MarkdownPreview.vue` | 新增 | Markdown 预览组件 |
|
||||
| `web/src/views/markdown-editor/` | 新增 | Markdown 编辑器页面 |
|
||||
| `web/src/style.css` | 扩展 | +316 行,Markdown/打印样式 |
|
||||
|
||||
---
|
||||
|
||||
## [0.3.2] - 2026-02-05
|
||||
|
||||
### 核心架构重构 🏗️
|
||||
|
||||
Reference in New Issue
Block a user