为什么要做 GoldenDict-Lite?
市面上的桌面词典工具,要么体积庞大,要么依赖繁重。
Goldendict-ng 功能强大,支持 15+ 种词典格式,但它依赖 Qt 6 全家桶——安装包动辄 50MB 起步,运行时还需要额外的 WebEngine、OpenSSL、FFmpeg 等库。对于一个"查个单词"的需求来说,这未免太重了。
Electron 方案更不用说——一个 Chromium 打包进去就是 100MB+,内存占用 150MB 起。
GoldenDict-Lite 的目标很简单:用最少的代码、最小的体积,实现 MDX 词典的查询功能。
技术选型:为什么是 TauriCPP (Lutra)?
经过对比,我们选择了 TauriCPP(又名 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:
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.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
gitee





