我们正在从头开始创建一个 javascript 库,我们需要一些实用函数,就像 dojo 提供的一样,例如xhr 包装器,简单的继承和数组操作等。我们不想自己从头开始编写这些功能,但我们也不希望只是从 dojo 复制和粘贴代码。
Dojo 提供自定义构建机制,但它在模块级别上工作。例如,在自定义构建中,您可以指定只在 dojo 库中添加 lang
模块。但是我们可能只需要lang
模块中的dojo.hitch
函数,而不需要中也包含的
模块。我们对库文件的大小有严格的限制,因此我们需要删除任何未使用的代码。dojo.clone
函数>lang
我们正在寻求的是一种从模块中提取某些功能并将这些功能构建到单个 javascript 文件中的方法。比如我们需要dojo.mixin
、dojo.declare
和dojo.hitch
函数,那么这些函数的声明和依赖的内部函数应该构建到单个文件中。
有什么建议吗?
根据我的测试结果更新
感谢 Stephen Chung 就如何解决此问题提出的重要建议。
所以基本上我创建了一个包含四个模块的自定义 dojo 构建:dojo._base.xhr
、dojo._base.json
、dojo._base.declare
和 dojo._base.lang
。构建的 dojo.js 文件为 149kb,在使用高级模式的 Google Closure 编译器后,大小减少到 24kb,并且删除了未使用的函数。如果我们想保留一些功能,只需添加另一个 javascript 文件,如下所示:
window['dojo'] = dojo;
window['dojo']['requireLocalization'] = dojo.requireLocalization;
window['dojo']['moduleUrl'] = dojo.moduleUrl;
并用 dojo.js 编译它。
遗憾的是尺寸还是有点大。我们总共有 40k 的大小限制。但对于其他情况,这仍然是一个非常好的解决方案。
最佳答案
Dojo Core 以非常紧凑的方式编写,有很多交叉调用(即一个函数调用其他函数)以节省下载字节并减少代码大小。
因此,您需要一组最小的 Dojo Core 函数,以及它调用的函数。
换句话说,您需要的是一个包含 Dojo Core 的构建,然后删除任何从未调用过的死代码。
我建议您不要自己从头开始编写一个占用空间最小的库。您需要的是使用 Closure Compiler 的 Advanced Mode 来处理您的 Dojo 应用程序。它删除无用代码、优化整个应用程序并完全混淆它。
是的,可以在高级模式下将 Closure Compiler 与 Dojo 结合使用——Dojo 可能是唯一可以做到这一点的流行库。读一读here .
一些统计数据:闭包编译的 Dojo 应用程序通常比 Shrinksafe 构建中的等效 Dojo 应用程序小 25-30%。这取决于您使用了多少 Dojo Core 功能——通常,仅通过删除无用代码,您就可以将 Dojo Core 减少至原始大小的 40%(即,将代码大小减少至多 60%)。进一步减少更加困难,因为您可能不得不开始删除 Dojo 加载器等功能。
关于javascript - 在功能级别自定义 dojo 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469693/