背景 我在做文档翻译网站 O.Translator (国外版) 和 商译 AI (国内版) 的时候,需要在浏览器支持 DOCX 、PDF 、PPTX 等不同文件的渲染预览。 项目初期,大部分文件类型预览都是使用开源库,对于 DOCX 文档,我选择了 VolodymyrBaydalka/docxjs 。 这个库做基本展示没问题,但大文件渲染( 20M 以上),会卡,有时候甚至让浏览器崩溃。初期,我只能在外层加门禁限制,比如 XML 超出 500 个或者文件超过 20M ,就不在网页渲染预览,让用户下载。 性能是最大的问题,直接导致很多 DOCX 文档没法在翻译完第一时间展示给用户,这个体验让我不太满意。其次,对于 XML 对象解析和 Style 族渲染支持度不够。 所以,早在一年前,我就有重写 DOCX 渲染库的想法,大体思路,整个架构基于 Worker-first 解耦,将耗时操作放到 Web Worker 中,比如解析、布局计算等,主线程只负责消费计算结果。 这样做,除了优化性能,还有一个考虑,引擎端输出结构化的布局语义,渲染端可以用 DOM ,可以用 ...