refactor: 收敛渲染链路共享抽象
This commit is contained in:
+36
-6
@@ -1,6 +1,6 @@
|
||||
# Markdown PDF 导出器进度
|
||||
|
||||
最后更新:2026-07-26
|
||||
最后更新:2026-07-27
|
||||
|
||||
## 1. 当前概况
|
||||
|
||||
@@ -19,6 +19,8 @@ main
|
||||
已有提交:
|
||||
|
||||
```text
|
||||
b459def fix: 修复预览与 PDF 渲染边界问题
|
||||
d93728b feat: 完善 Mermaid 配置与预览缩放
|
||||
d1b5880 feat: 实现 Chromium PDF 导出与精确预览
|
||||
d625523 fix: 修复长文档分页与滚动同步
|
||||
1d93f31 feat: 实现真实分页预览
|
||||
@@ -29,7 +31,8 @@ fa07472 feat: 实现网页实时预览
|
||||
ec48bce chore: 初始化项目骨架
|
||||
```
|
||||
|
||||
最新阶段已完成 Mermaid 全局导出配置、ELK 布局、代码块配置覆盖、重绘隐藏和两种预览模式共用的显示缩放。
|
||||
最新阶段已完成渲染边界逻辑修复,以及前后端分页载荷、文档类型、
|
||||
物理单位、主题资源加载和 Markdown 请求逻辑的复用收敛。
|
||||
|
||||
## 2. 已完成
|
||||
|
||||
@@ -209,9 +212,27 @@ ec48bce chore: 初始化项目骨架
|
||||
- 缩放不进入导出配置,不改变分页或 PDF;精确预览会按显示宽度重绘
|
||||
邻近 Canvas,保持文字清晰。
|
||||
|
||||
### 3.7 渲染边界修复与复用重构
|
||||
|
||||
- PDF 总超时覆盖 Chromium 启动、上下文创建、页面渲染和有界清理,
|
||||
浏览器预热也受同一超时约束。
|
||||
- 当前预览模式的重复点击不再触发无意义的状态重置和 PDF 请求。
|
||||
- Mermaid 分页测量使用实际主题、字体和盒模型,静态 SVG 图片锁定实际
|
||||
小数尺寸,避免测量容器宽度与真实纸张不一致。
|
||||
- 非法 Front Matter 在预览和 PDF API 中统一返回 400;无效本地主题
|
||||
会被隔离并记录警告,不影响其他主题。
|
||||
- `packages/core` 统一维护 Markdown 文档、分页载荷、分页结果和耗时类型,
|
||||
前端快速预览与后端 PDF 使用同一个载荷构造函数。
|
||||
- 前端 Markdown 防抖渲染与主题清单/CSS 加载已从 `App.tsx` 抽取为独立
|
||||
Hook,保留原有取消请求和错误隔离行为。
|
||||
- 主题注册表增加 1 秒目录扫描缓存和主动失效接口,减少同一请求链路中
|
||||
重复遍历主题目录,同时兼顾本地主题热更新。
|
||||
- CSS 像素与 PDF 点数换算只使用 core 中的共享常量;删除已经不参与协议
|
||||
或逻辑的 `contentHeight` 字段。
|
||||
|
||||
## 4. 已执行验证
|
||||
|
||||
2026-07-26 在当前完整工作区成功执行:
|
||||
2026-07-27 在当前完整工作区成功执行:
|
||||
|
||||
```text
|
||||
npm test
|
||||
@@ -222,16 +243,20 @@ git diff --check
|
||||
|
||||
结果:
|
||||
|
||||
- 共享配置测试:8 项通过;
|
||||
- 渲染器测试:7 项通过;
|
||||
- 共享配置测试:9 项通过;
|
||||
- 渲染器测试:8 项通过;
|
||||
- 前端测试:55 项通过;
|
||||
- 后端测试:23 项通过;
|
||||
- 后端测试:29 项通过;
|
||||
- 全项目类型检查通过;
|
||||
- 生产构建通过;
|
||||
- `git diff --check` 通过。
|
||||
|
||||
已使用浏览器插件完成视觉验证:
|
||||
|
||||
- 重构后的初始 Markdown 和主题资源加载正常,快速预览生成 1 页;
|
||||
- 编辑 Markdown 后标题、表格、Mermaid 和分页状态均完成防抖重绘;
|
||||
- 从本地 GitHub 主题切换到内置 Typora 风格主题后 iframe 正常重建;
|
||||
- 本轮浏览器回归期间控制台无警告或错误;
|
||||
- 预览缩放在 50%、100%、150% 和 400% 下均按比例显示,快速与精确
|
||||
预览的分页结果不受缩放影响;
|
||||
- 包含 ELK、Base 主题、Hand-drawn 外观、自定义字体、
|
||||
@@ -276,6 +301,9 @@ git diff --check
|
||||
|
||||
- `output/` 可能包含本地 PDF 验证产物,已被 Git 忽略,不得提交。
|
||||
- `apps/web/src/App.tsx` 负责分页 iframe 生命周期和父页面消息处理。
|
||||
- `apps/web/src/use-markdown-render.ts` 负责 Markdown 防抖请求、取消和
|
||||
渲染错误状态。
|
||||
- `apps/web/src/use-theme-resources.ts` 负责主题清单、主题 CSS 和请求取消。
|
||||
- `apps/web/src/paged-document-runtime.ts` 是快速预览和 PDF 共用的 Mermaid、资源等待和 Paged.js 分页运行时。
|
||||
- `apps/web/src/paged-preview-frame.ts` 负责 iframe 消息协议和运行目标选择。
|
||||
- `apps/web/src/paged-preview.ts` 负责分页协议、共享文档 CSS、页眉和页码 CSS。
|
||||
@@ -288,6 +316,8 @@ git diff --check
|
||||
- `apps/web/src/ExportSettingsDrawer.tsx` 是导出设置界面。
|
||||
- `apps/web/src/export-settings.ts` 负责版本化浏览器缓存。
|
||||
- `packages/core/src/export-config.ts` 是纸张、页边距、页眉页脚和页码的共享模型。
|
||||
- `packages/core/src/document.ts` 是渲染文档、分页载荷、运行结果和耗时的
|
||||
共享模型。
|
||||
- `apps/server/src/app.ts` 是新增的可测试 Fastify 应用。
|
||||
- `apps/server/src/theme-registry.ts` 负责内置和本地主题发现、CSS 处理及资源安全。
|
||||
- `.local/themes/typora-*` 是用户本机副本,已被 Git 忽略,不得提交。
|
||||
|
||||
Reference in New Issue
Block a user