# 从 Goldendict-ng 到 GoldenDict-Lite：一个词典工具的瘦身之旅

**URL:** <https://forum.freemdict.com/t/topic/44393>\
**Category:** 软件经验交流展望\
**Tags:** 英汉\
**Created:** [2026 年6 月 23 日 01:18 UTC](https://forum.freemdict.com/t/topic/44393 "2026-06-23T01:18:12Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 01:18 UTC](https://forum.freemdict.com/t/topic/44393/1 "2026-06-23T01:18:13Z")

</div>

## 为什么要做 GoldenDict-Lite？

市面上的桌面词典工具，要么体积庞大，要么依赖繁重。

**Goldendict-ng** 功能强大，支持 15+ 种词典格式，但它依赖 Qt 6 全家桶——安装包动辄 50MB 起步，运行时还需要额外的 WebEngine、OpenSSL、FFmpeg 等库。对于一个"查个单词"的需求来说，这未免太重了。

**Electron 方案** 更不用说——一个 Chromium 打包进去就是 100MB+，内存占用 150MB 起。

GoldenDict-Lite 的目标很简单： **用最少的代码、最小的体积，实现 MDX 词典的查询功能** 。

## 技术选型：为什么是 TauriCPP (Lutra)？

经过对比，我们选择了 [TauriCPP](https://gitee.com/masonwu21/tauri-cpp)（又名 Lutra）作为 UI 框架：

| 框架 | 语言 | 渲染引擎 | 二进制体积 | 内存占用 |
| --- | --- | --- | --- | --- |
| **TauriCPP** | C++ | WebView2 (系统自带) | ~1MB | 50-80MB |
| Tauri | Rust | WebView2 | 3-10MB | 30-80MB |
| Electron | JS/TS | Chromium (内置) | 100MB+ | 150MB+ |
| Qt 6 | C++ | WebEngine | 50MB+ | 200MB+ |

TauriCPP 的核心优势：

- **纯 C++** ，无 FFI 开销，直接调用 Win32 API
- **静态链接 WebView2Loader** ，单 EXE 部署
- **前端资源内嵌** ，编译进 EXE 的资源段，运行时从内存加载，无临时文件
- **双向通信** ，JS ↔ C++ 通过 Promise 桥接

## 从 Goldendict提取 MDX 解析器

Goldendict的 MDICT 解析器（`mdictparser`）是整个项目的核心。但原始代码深度依赖 Qt：

```auto
QFile → std::fopen + Windows mmap
QDataStream → 手动字节序读取
QByteArray → std::vector<char>
QString → std::string
QDomDocument → std::regex
QMutex → std::mutex
QAtomicInt → std::atomic<int>
QIcon/QPixmap → 移除 (Lite 版不需要)

```

## 实际效果

- **EXE 体积** : ~500KB（含前端资源和图标，新版已经2MB了）
- **启动时间** : \<1 秒
- **单次查询** : 1-3 秒（需重新打开 MDX 读取记录块）
- **内存占用** : ~7MB / 430 万词条

## 结论

对于只需要 MDX 格式词典的用户，GoldenDict-Lite 提供了一个极致轻量的替代方案。它证明了： **用现代 C++ 和系统原生 WebView，完全可以构建出体积极小、功能够用的桌面应用** 。

## v1.3.0 更新内容

- 新增 shell\_open 命令 — 支持通过默认浏览器打开外部链接
- 新增黑金 Toast 提示样式 — 优雅的通知效果
- 优化状态栏布局 — 版本号与图标更紧凑
- 版本号更新至 1.3.0

## v1.2.4 更新内容

- 新增多列布局 — 窗口宽度足够时自动切换为多列显示词典结果
- 新增导出 PNG 功能 — 每个词典区域右上角按钮，可导出当前词典释义为 PNG 图片
- 导出图片含水印 — 右上角显示词典图标 + 词典名称 × GoldenDict Lite
- 修复 `@@@LINK=` 重定向导致跳过后续词典的问题（如查询"流"只显示一个结果）
- 修复多词典 CSS 样式互相污染问题（每个词典 CSS 通过 `data-dict-index` 属性隔离作用域）
- 修复 CSS 作用域解析器丢失规则体内容的 bug

## **v1.2.0 更新内容**

- 新增 MDD 图片嵌入 — 词条中的 `<img>` 标签自动从 MDD 资源加载并替换为 base64 内嵌图片
- 新增词典栏 Tooltip — 悬停显示词典名称和词条数
- 新增状态栏版本号显示
- 修复词条页面绝对定位元素溢出容器的问题
- 修复音频按钮与词条标题不在同一行的问题
- 优化构建脚本 — 直接调用 MSVC 环境编译，无需手动配置 vcpkg 工具链
- 新增 Windows 版本信息资源（右键 EXE → 属性可查看版本）
- 重构资源查找逻辑，提取 `lookupResourceLocked` 内部方法

## **v1.1.0 更新内容**

- 新增 MDD 多媒体资源支持（音频、图片等）
- 新增多卷 MDD 文件加载（.1.mdd, .2.mdd, …）
- 新增 sound:// 链接自动替换为可点击播放的音频
- 新增词典折叠/展开功能
- 新增底部词典栏拖拽排序
- 新增词典排序持久化（dict\_order.json）
- 新增 SQLite 缓存层，二次启动秒加载
- 新增 38 个单元测试
- 修复中文路径/中文文件名词典无法加载的问题
- 修复 GBK 编码词典标题乱码问题
- 修复查询含 GBK 编码内容时 JSON 序列化崩溃的问题
- 修复 ::tolower/toupper 对 signed char 的未定义行为
- 修复 std::stoi 在 substituteStylesheet 中的异常崩溃
- 修复 fseek 32 位偏移量限制（改用 \_fseeki64）
- 修复 nlohmann::json::dump() 对非 UTF-8 字符串的 type\_error.316 崩溃
- 全静态链接：zlib、WebView2Loader、CRT 均为静态链接，无外部 DLL 依赖

完整源码和编译说明：  
[github.com](https://github.com/Emsoro/GoldenDict-Lite)  
[gitee](https://gitee.com/masonwu21/golden-dict-lite)

## 打赏

如果这个项目对你有帮助，欢迎打赏支持：

 ![Donate](https://forumcdn.freemdict.com/uploads/default/original/3X/8/1/81c1c3b49540d99de5892859768d75d2f1b85dbf.jpeg)

---

<div class="post-metadata">

**Author:** ![hua](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/hua/32/11090_2.png) [@hua](https://forum.freemdict.com/u/hua)\
**Post date:** [2026 年6 月 23 日 11:44 UTC](https://forum.freemdict.com/t/topic/44393/2 "2026-06-23T11:44:16Z")

</div>

楼主可以在 github 放一份吗。

---

<div class="post-metadata">

**Author:** ![hahaya](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/77aa72/32.png) [@hahaya](https://forum.freemdict.com/u/hahaya)\
**Post date:** [2026 年6 月 23 日 11:54 UTC](https://forum.freemdict.com/t/topic/44393/3 "2026-06-23T11:54:23Z")

</div>

好像没有看到对mdd文件的支持？另外支持mdd中含有的多媒体资源吗？

---

<div class="post-metadata">

**Author:** ![hahaya](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/77aa72/32.png) [@hahaya](https://forum.freemdict.com/u/hahaya)\
**Post date:** [2026 年6 月 23 日 11:57 UTC](https://forum.freemdict.com/t/topic/44393/4 "2026-06-23T11:57:33Z")

</div>

目前GD包括GD-NG加载多个词典，词典之间有时会互相干扰，经常出现各种莫名其妙的问题需要逐一排查，想问下这个程序加载多个词典，会出现干扰吗 还是分别独立加载的？

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 12:29 UTC](https://forum.freemdict.com/t/topic/44393/5 "2026-06-23T12:29:44Z")

</div>

就做了mdx格式因为我只有mdx

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 12:30 UTC](https://forum.freemdict.com/t/topic/44393/6 "2026-06-23T12:30:56Z")

</div>

放了 在这里 [GitHub - Emsoro/GoldenDict-Lite · GitHub](https://github.com/Emsoro/GoldenDict-Lite)

---

<div class="post-metadata">

**Author:** ![feiwu](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/f17d59/32.png) [@feiwu](https://forum.freemdict.com/u/feiwu)\
**Post date:** [2026 年6 月 23 日 12:40 UTC](https://forum.freemdict.com/t/topic/44393/7 "2026-06-23T12:40:42Z")

</div>

所有词典都堆在指定目录里？

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 12:53 UTC](https://forum.freemdict.com/t/topic/44393/8 "2026-06-23T12:53:12Z")

</div>

不好意思，还没改进，我过两天改改。

---

<div class="post-metadata">

**Author:** ![feiwu](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/f17d59/32.png) [@feiwu](https://forum.freemdict.com/u/feiwu)\
**Post date:** [2026 年6 月 23 日 12:56 UTC](https://forum.freemdict.com/t/topic/44393/9 "2026-06-23T12:56:02Z")

</div>

不支持中文路径，中文名辞典无法导入，改成字母才行。

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 13:03 UTC](https://forum.freemdict.com/t/topic/44393/10 "2026-06-23T13:03:32Z")

</div>

是吗 我的就是有个中文名的词典，可以加载啊

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/f/6/f62049f9d4dc79fd4b75d2dda3b8f2bce6ac2204.png)

---

<div class="post-metadata">

**Author:** ![feiwu](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/f/f17d59/32.png) [@feiwu](https://forum.freemdict.com/u/feiwu)\
**Post date:** [2026 年6 月 23 日 13:19 UTC](https://forum.freemdict.com/t/topic/44393/11 "2026-06-23T13:19:28Z")

</div>

一个纯中文路径，一直在loading

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/a/6/a69766059695c16f7cedd2aa8bf83334b29d62a8.png)  
改成数字，正常加载  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/4/2/423993a51b709690ac8ebc450eb650cc6c463ffb.png)  
一个中文和一个数字，虽然显示加载成功，但下面没有显示文件路径  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/c/0/c05a221cda7090f16942b08a634949627de60bb4.png)  
搜索时有词条提示，但不显示内容  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/1/d/1d0046343eda133e93e46809aa75229a55182222.png)  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/1/0/10007be1cc4bbdf6e1eb13e22637445282a55253.png)

---

<div class="post-metadata">

**Author:** ![hahaya](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/77aa72/32.png) [@hahaya](https://forum.freemdict.com/u/hahaya)\
**Post date:** [2026 年6 月 23 日 13:21 UTC](https://forum.freemdict.com/t/topic/44393/12 "2026-06-23T13:21:37Z")

</div>

很多mdx词库都有配套mdd呢，将来会支持吗？

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 13:38 UTC](https://forum.freemdict.com/t/topic/44393/13 "2026-06-23T13:38:32Z")

</div>

可以吧 也不是难事

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 18:43 UTC](https://forum.freemdict.com/t/topic/44393/14 "2026-06-23T18:43:30Z")

</div>

支持了 去下1.1版本

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 23 日 18:44 UTC](https://forum.freemdict.com/t/topic/44393/15 "2026-06-23T18:44:09Z")

</div>

修复了 去下新版

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2026 年6 月 24 日 00:46 UTC](https://forum.freemdict.com/t/topic/44393/16 "2026-06-24T00:46:37Z")

</div>

有意思，关注 github 仓库了！

---

<div class="post-metadata">

**Author:** ![hapocn](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/bc79bd/32.png) [@hapocn](https://forum.freemdict.com/u/hapocn)\
**Post date:** [2026 年6 月 24 日 00:54 UTC](https://forum.freemdict.com/t/topic/44393/17 "2026-06-24T00:54:01Z")

</div>

感谢做出新的词典软件,多一个选择.

---

<div class="post-metadata">

**Author:** ![xiao\_cao](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/x/7993a0/32.png) [@xiao\_cao](https://forum.freemdict.com/u/xiao_cao)\
**Post date:** [2026 年6 月 24 日 01:04 UTC](https://forum.freemdict.com/t/topic/44393/18 "2026-06-24T01:04:39Z")

</div>

> [@masonwu21](#):
>
> GitHub - Emsoro/GoldenDict-Lite · GitHub

能支持macos吗

---

<div class="post-metadata">

**Author:** ![masonwu21](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/74df32/32.png) [@masonwu21](https://forum.freemdict.com/u/masonwu21)\
**Post date:** [2026 年6 月 24 日 01:22 UTC](https://forum.freemdict.com/t/topic/44393/19 "2026-06-24T01:22:01Z")

</div>

我没有mac啊 没法开发 欢迎大家拿我源码开发mac版本

---

<div class="post-metadata">

**Author:** ![hapocn](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/h/bc79bd/32.png) [@hapocn](https://forum.freemdict.com/u/hapocn)\
**Post date:** [2026 年6 月 24 日 02:17 UTC](https://forum.freemdict.com/t/topic/44393/20 "2026-06-24T02:17:24Z")

</div>

打开闪退

debug.log:  
GoldenDict-Lite starting  
Icon loaded  
App created  
Loading dictionaries…  
Window icon set

mdict\_debug.log:  
Opened V:\Download\dictionary\中\_unihan17\中\_unihan17.mdx, size=13008371  
readHeader: headerTextSize=692 (bytes: 00 00 02 b4)  
readHeader: raw header first 32 bytes: 3c 00 44 00 69 00 63 00 74 00 69 00 6f 00 6e 00 61 00 72 00 79 00 20 00 47 00 65 00 6e 00 65 00  
readHeader: headerText size=368 empty=0  
readHeader: headerText (first 200)=‘\<Dictionary GeneratedByEngineVersion=“2.0” RequiredEngineVersion=“2.0” Encrypted=“No” Encoding=“UTF-8” Format=“Html” Stripkey=“Yes” CreationDate=“2025-9-17” Compact=“Yes” Compat=“Yes” KeyCaseSensitive’

[下一页](https://forum.freemdict.com/t/topic/44393.md?page=2)
