Files
argon-theme/.kiro/specs/mermaid-codeblock-magic/known-issues.md
nanhaoluo c37e8da986 feat: 完成统一 AI 查询组件的集成
- 更新 argon_detect_spam_comment_sync() 使用统一接口
- 更新 argon_extract_keywords_from_comment() 使用统一接口
- 删除旧的 argon_call_ai_api_for_spam_detection() 函数
- 删除旧的 argon_call_ai_for_keyword_extraction() 函数
- 所有 AI 查询现在都通过 argon_ai_query() 统一接口
- 所有查询都会记录到 wp_argon_ai_query_log 数据表
- 支持按场景统计(summary/spam_detection/keyword_extraction)
2026-01-26 12:49:49 +08:00

7.9 KiB
Raw Blame History

Mermaid 图表渲染 - 已知问题和限制

已知问题

1. WordPress 编辑器兼容性

问题描述

某些 WordPress Markdown 插件(如 WP-Markdown会在输出时对 Mermaid 代码进行额外处理,可能导致:

  • 代码被包裹在 <script> 标签中
  • HTML 实体被转义(如 -> 变成 &rarr;
  • 换行符被转换为 <br> 标签

解决方案

渲染引擎已实现以下兼容处理:

  • 自动提取 document.write() 中的代码
  • 解码 HTML 实体和 Unicode 字符
  • <br> 标签转换为换行符

建议

  • 推荐使用代码块语法(````mermaid`
  • 避免使用会修改代码的 Markdown 插件
  • 如遇问题,可在设置中启用调试模式查看详细日志

2. 复杂图表性能

问题描述

包含大量节点(>50个的复杂图表可能导致

  • 渲染时间较长
  • 页面滚动卡顿
  • 移动端性能下降

解决方案

  • 已实现批量渲染每批3个图表
  • 已实现延迟加载(优先渲染可见图表)
  • 使用 requestAnimationFrame 优化性能

建议

  • 将复杂图表拆分为多个小图表
  • 使用子图subgraph组织结构
  • 避免在一个页面放置过多图表

3. 移动端触摸手势冲突

问题描述

在某些移动浏览器中,触摸手势可能与页面滚动冲突:

  • 双指缩放时可能触发页面缩放
  • 单指拖拽时可能触发页面滚动

解决方案

  • 已使用 preventDefault() 阻止默认行为
  • 已使用 passive: false 确保事件可取消

建议

  • 在移动端使用全屏模式查看大图表
  • 确保浏览器支持触摸事件

4. 主题切换时的闪烁

问题描述

切换主题时,图表重新渲染可能出现短暂闪烁。

解决方案

  • 已实现淡入淡出过渡效果
  • 已保持图表的缩放级别和位置

影响

  • 闪烁时间约 0.5 秒
  • 不影响功能使用

5. 导出功能的浏览器兼容性

问题描述

PNG 导出功能依赖 Canvas API在某些旧版浏览器中可能不支持。

解决方案

  • 已添加错误处理和友好提示
  • 提供 SVG 导出作为替代方案

建议

  • 使用现代浏览器Chrome 90+, Firefox 88+, Safari 14+
  • 如 PNG 导出失败,使用 SVG 导出

功能限制

1. Mermaid 版本要求

最低版本: Mermaid 9.0+

推荐版本: Mermaid 10.0+

原因:

  • 旧版本的 mermaid.render() API 不同
  • 某些图表类型在旧版本中不支持

兼容性处理:

  • 已实现旧版 API 降级支持Mermaid 8.x
  • 如果 mermaid.render() 不可用,会尝试使用 mermaidAPI.render()
  • 最后降级到 mermaid.init()

2. 图表大小限制

最大节点数: 建议不超过 50 个

最大图表尺寸: 建议不超过 5000x5000 像素

原因:

  • 过大的图表会影响渲染性能
  • 导出 PNG 时可能超出 Canvas 大小限制

建议:

  • 使用子图组织复杂结构
  • 将大图表拆分为多个小图表

3. 缩放范围限制

最小缩放: 0.5 倍50%

最大缩放: 3 倍300%

原因:

  • 过小的缩放会导致文字不可读
  • 过大的缩放会导致图表超出容器

建议:

  • 使用全屏模式查看大图表
  • 使用导出功能保存高清图片

4. 全屏模式限制

不支持的浏览器:

  • IE 11 及以下版本
  • 某些旧版移动浏览器

原因:

  • 使用了现代 CSS 特性(如 position: fixed
  • 依赖 JavaScript 事件监听

降级方案:

  • 在不支持的浏览器中,全屏按钮会被隐藏
  • 用户仍可使用缩放和拖拽功能

5. PJAX 兼容性

要求:

  • 必须使用 Argon 主题内置的 PJAX 实现
  • 不支持第三方 PJAX 插件

原因:

  • 渲染引擎监听 Argon 主题的 PJAX 事件
  • 第三方插件的事件名称可能不同

建议:

  • 使用主题设置中的 PJAX 选项
  • 如使用第三方插件,需手动调用 MermaidRenderer.renderAllCharts()

浏览器兼容性

完全支持

浏览器 最低版本 说明
Chrome 90+ 推荐使用
Firefox 88+ 推荐使用
Safari 14+ 推荐使用
Edge 90+ 推荐使用

部分支持

浏览器 版本 限制
Chrome 80-89 某些 CSS 特性不支持
Firefox 78-87 某些 CSS 特性不支持
Safari 13 触摸手势可能不流畅
Edge 80-89 某些 CSS 特性不支持

不支持

浏览器 版本 原因
IE 所有版本 不支持 ES6+ 语法
Chrome <80 缺少必要的 API
Firefox <78 缺少必要的 API
Safari <13 缺少必要的 API

性能基准

渲染性能

图表数量 平均渲染时间 说明
1-5 个 <500ms 流畅
6-10 个 500-1000ms 可接受
11-20 个 1-2s 可能有延迟
>20 个 >2s 建议分页

测试环境: Chrome 120, Intel i5-10400, 16GB RAM

内存占用

图表数量 内存占用 说明
1-5 个 <10MB 正常
6-10 个 10-20MB 正常
11-20 个 20-40MB 可接受
>20 个 >40MB 建议优化

交互性能

操作 响应时间 说明
缩放 <16ms 60fps
拖拽 <16ms 60fps
全屏 <100ms 流畅
导出 500-2000ms 取决于图表大小

安全性说明

1. XSS 防护

措施:

  • Mermaid 配置中设置 securityLevel: 'loose'
  • 允许 HTML 标签以支持富文本
  • 所有用户输入都经过 WordPress 的安全过滤

风险:

  • 如果允许未经审核的用户发布文章,可能存在 XSS 风险

建议:

  • 只允许可信用户发布包含 Mermaid 图表的文章
  • 定期审查文章内容

2. 资源加载

措施:

  • Mermaid 库从 CDN 或本地加载
  • 不加载外部资源

风险:

  • 如果 CDN 被劫持,可能加载恶意代码

建议:

  • 使用 HTTPS 加载资源
  • 考虑使用本地托管的 Mermaid 库

已修复的问题

v1.0.0 (2026-01-22)

  1. PJAX 页面切换后图表不渲染

    • 原因: 未监听 PJAX complete 事件
    • 解决: 在 PJAX complete 事件中调用 renderAllCharts()
  2. Mermaid 库加载时序问题

    • 原因: 清除缓存后首次加载时 Mermaid 库未完全加载
    • 解决: 实现 waitForMermaid() 等待机制
  3. 语法错误导致页面崩溃

    • 原因: 未捕获 Mermaid 渲染错误
    • 解决: 添加完善的错误处理和友好提示
  4. 重复渲染导致性能问题

    • 原因: 未标记已渲染的图表
    • 解决: 使用 data-mermaid-rendered 属性标记
  5. 主题切换后图表不更新

    • 原因: 未监听主题切换事件
    • 解决: 监听 argon:theme-switched 事件和 darkmode class 变化
  6. 移动端无法缩放和拖拽

    • 原因: 未实现触摸手势支持
    • 解决: 添加双指缩放和单指拖拽支持
  7. 导出功能在某些浏览器中失败

    • 原因: 未处理 Canvas API 错误
    • 解决: 添加错误处理和 SVG 导出替代方案

反馈和建议

如果你遇到了本文档未列出的问题,或有改进建议,请:

  1. 检查浏览器控制台: 查看是否有错误信息
  2. 启用调试模式: 在控制台执行 window.argonMermaidConfig.debugMode = true
  3. 提交 Issue: 在主题 GitHub 仓库提交详细的问题报告
  4. 联系作者: 通过主题支持渠道联系

提交 Issue 时请包含:

  • 浏览器版本和操作系统
  • Mermaid 代码示例
  • 错误信息截图
  • 控制台日志

更新计划

短期计划1-3个月

  • 添加更多图表类型支持
  • 优化移动端体验
  • 添加图表编辑功能
  • 支持自定义主题配色

长期计划3-6个月

  • 添加图表协作功能
  • 支持实时预览
  • 添加图表模板库
  • 支持图表版本控制

最后更新: 2026-01-22
文档版本: v1.0.0