包体积:只加载您用到的插件
本文档中的每个示例以及下载包中的每个演示,加载的都是 all_plugins.min.js——全部插件,无论页面是否用到。这在首次运行时很方便,但在生产环境中是一种浪费。只加载实际用到的插件文件,可以让编辑器从 529 KB 降到 214 KB(gzip),而且不需要构建步骤、不需要打包工具,也不需要修改应用代码——只需换一组 <script> 标签。
实测的预设组合
数字为 rte.js、默认主题 CSS 以及所列插件文件的 gzip 传输大小,基于 2.6.7 版本测得。随后在浏览器中逐一加载每个预设:它能启动、编辑区域可编辑,并且其插件所承诺的功能都存在且可用。最后一列是 58 个默认工具栏按钮中仍可使用的数量。
| 预设 | 传输大小(gzip) | 相比 everything | 工具栏按钮 | 包含的功能 |
|---|---|---|---|---|
core | 214 KB | -60% | 52 | 格式设置、列表、表格、链接、图片、查找和替换、撤销。完全不加载插件文件。 |
blog | 241 KB | -54% | 52 | 块类型、清单、代码块、Markdown 导出、本地草稿、目录。 |
documents | 297 KB | -44% | 52 | .docx 和 PDF 导出、文档导入、脚注、分页、法律文书列表、交叉引用。 |
review | 417 KB | -21% | 56 | 批注、修订跟踪、修订历史、无障碍检查器。 |
collab | 437 KB | -17% | 54 | 实时协同编辑,以及协作者需要的审阅功能。 |
everything | 529 KB | — | 58 | all_plugins.min.js:默认方案,也就是什么都不改时得到的结果。 |
您目前加载的内容
<!-- The default: every plugin, whether the page uses it or not. -->
<link rel="stylesheet" href="/richtexteditor/rte_theme_default.min.css">
<script src="/richtexteditor/rte.js"></script>
<script src="/richtexteditor/plugins/all_plugins.min.js"></script>更小的编辑器:blog 预设
把单个打包文件的标签替换为每个插件一个标签。插件之间可以按任意顺序加载;rte.js 要保持在最后。设置写在传给构造函数的配置对象中,而不是单独的文件里——rte.js 已经包含默认值,下载包中也没有需要单独加载的 rte-config.js。
<link rel="stylesheet" href="/richtexteditor/rte_theme_default.min.css">
<!-- Only the plugins this editor uses. Order among plugins does not matter. -->
<script src="/richtexteditor/plugins/blocktypes.js"></script>
<script src="/richtexteditor/plugins/todolist.js"></script>
<script src="/richtexteditor/plugins/insertcode.js"></script>
<script src="/richtexteditor/plugins/markdownexport.js"></script>
<script src="/richtexteditor/plugins/localdraft.js"></script>
<script src="/richtexteditor/plugins/tableofcontents.js"></script>
<script src="/richtexteditor/rte.js"></script>其他预设的写法相同,只是插件列表不同:
| 预设 | plugins/ 中的插件文件 |
|---|---|
blog | blocktypes.js todolist.js insertcode.js markdownexport.js localdraft.js tableofcontents.js |
documents | blocktypes.js todolist.js tableofcontents.js documentimport.js docxexport.js pdfexport.js wordexport.js footnotes.js pagination.js multilevellist.js crossreference.js |
review | aitoolkit.js comments.js trackedchanges.js revisionhistory.js accessibilitychecker.js |
collab | aitoolkit.js yjscollab.js crdt-engine.min.js comments.js trackedchanges.js |
仅核心:完全不加载插件文件
核心并不是一个空架子。粗体、斜体和下划线、字体和字号、颜色、对齐、列表、缩进、链接、图片、表格、查找和替换、撤销和重做、HTML 源代码视图以及粘贴清理都在 rte.js 中:不加载任何插件时,58 个默认工具栏按钮中有 52 个可以使用。
<!-- No plugin files. 52 of the 58 default toolbar buttons still work. -->
<link rel="stylesheet" href="/richtexteditor/rte_theme_default.min.css">
<script src="/richtexteditor/rte.js"></script>
<script>
var editor = new RichTextEditor("#div_editor");
</script>隐藏不再需要的按钮
// Dropping a plugin file does not remove its toolbar button - the button stays
// and does nothing when pressed. Name the tools you kept, and nothing else shows.
var config = {};
config.toolbar = "{bold,italic,underline}|{insertlink,insertimage}|{blocktypes}|{todolist,insertcode}";
var editor = new RichTextEditor("#div_editor", config);完整的工具名称列表见工具栏与菜单项参考。
这不能解决什么
- 核心是下限。
rte.js本身就有 191 KB(gzip),无法再进一步拆分。无论怎样组合 script 标签,都无法低于core这一行。 - 单独的插件文件没有经过压缩——只有合并后的
all_plugins.min.js经过了压缩。因此上面的数字是基于未压缩的插件源文件测得的,用您自己的压缩工具处理之后,节省的体积只会比表中更多,绝不会更少。 - 批注需要
aitoolkit.js。在review和collab预设中它不是可选的:批注的持久化在它里面,没有它时editor.comments仍然存在,但每次add()都会返回 null,而不会明确报错。它占了这两个预设的大部分体积。如果需要批注,就要加载它。 - 这里没有任何延迟加载。这些都是加载时的选择:不在 script 标签中的插件,在整个页面生命周期内都不存在。
检查您自己的页面
打开浏览器的网络面板,筛选 richtexteditor,查看传输大小列,而不是报告未压缩字节数的资源大小列。如果列表中有 all_plugins.min.js,上表就是您仍可节省的体积。