本文面向 CSDN 的 C++ 开发者。一个常见的误解是:写一套能编辑文档、能做表格的办公软件,怎么也得几百兆起步。但 iOffice 整套发布包只有约 6 MB——它是怎么做到的?这篇文章把"减肥"的底层逻辑讲清楚。
一、先纠正一个误区:Office 大,不是因为"功能多"
很多人以为 Office 安装包上 G,是因为功能复杂。其实大头在别处:
- 运行时与依赖:.NET、各种 VC++ 运行库、共享组件;
- 安装与注册:写入注册表、全局 COM 注册、资源预生成;
- 兼容历史包袱:几十年累计的格式与旧版兼容代码;
- 品牌与更新:自更新、遥测、模板市场……
换句话说,"大"更多是工程交付方式的问题,不是"功能本身"的问题。
二、6 兆是怎么来的:四个关键选择
1. 不打包运行时,用系统已有的
iOffice 基于 WebView2。Win10/Win11 上 WebView2 运行时大多已随系统存在,不需要打进安装包。C++ 侧静态链接 xlnt、WebView2Loader,不依赖外部 DLL 散落一地。最终就是一个 exe + 内嵌前端资源,没有安装器、不写注册表。
2. 界面交给 Web 技术,C++ 只做"重活"
如果用 Qt/MFC 手搓一套带工具栏、菜单、表格渲染的界面,代码量和依赖都会膨胀。iOffice 的做法是:
- C++(TauriCPP + xlnt):文件对话框、
.xlsx真实读写、版本信息、进程宿主; - React + FortuneSheet:界面、表格、文档编辑。
前端代码以资源形式编译进 exe(用 CMake 把 dist/ 打包成 .rc 资源),运行时从内存加载,不占额外文件。
3. 用"够用"的库,不引入全家桶
xlnt 只做 xlsx 读写,几 MB 静态库;文档编辑用现成的 React 组件。没有引入庞大的 Office 兼容引擎、没有 PDF 渲染全家桶、没有宏虚拟机。功能聚焦在"日常轻量办公",体积自然压得住。
4. 静态链接 + LTCG,体积可控
CMake 里把第三方库编成静态库(STATIC ON),配合编译器优化,最终 exe 在 Release 下只有约 6 MB。没有动态 DLL 依赖地狱,也没有运行时下载。
三、C++ 侧几个"减肥"相关的小技巧
用资源段代替散落文件
前端产物(html/js/css/空白 docx)通过 Python 脚本生成 .rc,编译进 exe:
add_executable(iOffice WIN32
src/main.cpp
${RESOURCE_MAP_CPP}
${RESOURCES_RC} # 前端资源已编译进 exe
)
运行时从资源段读,用户看到的只有一个 exe。
版本信息也编进资源
用 VS_VERSION_INFO 写进 exe,右键属性就能看版本,不需要额外配置文件。
字符串编码一次搞对,避免反复返工
早期踩过坑:数字被当成字符串存,读回来前端不渲染;公式无缓存值要留给前端重算。与其在运行时打补丁,不如在写入端用 std::stod 把可解析的数字转成 double——一次写对,后面省一堆体积和 bug。
四、为什么"小"很重要
- 双击即用:不用等安装进度条;
- 好分发:邮件、U 盘、群里发一个 exe 就行;
- 可审计:没有后台服务、没有遥测;
- 对老机器友好:低配电脑也能跑。
对于"写个文档、填个表"这种 90% 的日常场景,6 MB 的工具比上 G 的套件更顺手。
五、给想自己写的同学
如果你也想用 C++ 做一个"小但真能用"的工具,核心思路就三条:
- C++ 守边界:只做系统级、文件级、性能级的硬活;
- 界面交给 Web:React/Vue 随便挑,打包进资源;
- 静态链接 + 精简依赖:别让运行时和 DLL 把你撑胖。
剩下的,就是选一个你每天真用得上的场景,开写。


被折叠的 条评论
为什么被折叠?



