【发布时间】:2011-07-25 02:10:42
【问题描述】:
我们正在从头开始创建一个 javascript 库,我们需要一些实用程序函数,就像 dojo 提供的一样,例如xhr 包装器、简单的继承和数组操作等。我们不想自己从头开始编写这些函数,但我们也不想只是从 dojo 复制和粘贴代码。
Dojo 提供了自定义构建机制,但它在模块级别上工作。例如,在自定义构建中,您可以指定仅在 dojo 库中添加 lang 模块。但是我们可能只需要lang 模块中的dojo.hitch 函数,而不需要lang 模块中同样包含的dojo.clone 函数。我们对库文件的大小有严格的限制,因此我们需要删除所有未使用的代码。
我们正在寻求一种从模块中提取某些函数并将这些函数构建到单个 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 的大小限制。但这对于其他情况仍然是一个很好的解决方案。
【问题讨论】:
-
只是出于好奇,您为什么需要这么小的构建?要在移动设备上运行它?
-
是的。我们需要在移动设备上运行,总大小限制为 40kb,包括实用程序库和其他 javascript 文件。
-
40KB 压缩包?您可能需要 dojox.mobile。如果您不需要 dijit,我将 Dojo Core 压缩到 21KB 压缩到我的应用程序中(它使用了很多东西)。通过删除死代码,您可以走得更远(例如,如果您不使用发布/订阅、XHR、fx、i18n、格式化、加载程序等)。看我的分析:permalink.gmane.org/gmane.comp.web.dojo.devel/13922
-
我有一个完整的 iPad 网络应用程序,压缩后压缩到 70KB。它使用了 Dojo Core、dijit.Dialog/dijit._Templated 和 dojox.mobile 的大部分内容。如果您只注意使用最少的功能、跳过 dijit 并严格使用您的用户代码,那么您可以很容易地满足 40KB 的 gzip 压缩。
-
你还没有一路。 :-) 您必须将最小的 Dojo 库与您自己的代码一起编译,然后删除“dojo”命名空间本身。这样,一切都被压缩到一个字符的变量中。因此,您仍然可以进一步挤压它。在 Github (github.com/schungx/Dojo-Closure-Advanced) 上获取我的资料并查看文档。使用 dojo.declare 非常小心 -- 通读我的文档以了解如何使用 get/set 处理损坏的属性名称。
标签: javascript build dojo