自定义dojo构建在函数级别

时间:2011-03-29 08:18:08

标签: javascript build dojo

我们正在从头开始创建一个javascript库,我们需要一些实用程序函数,就像dojo提供的一样,例如xhr包装器,简单的继承和数组操作等。我们不想自己编写这些函数,但我们也不想只是从dojo复制和粘贴代码。

Dojo提供自定义构建机制,但它适用于模块级别。例如,在自定义构建中,您可以指定仅在dojo基础中添加lang模块。但我们可能只需要dojo.hitch模块中的lang函数,而不需要dojo.clone模块中包含的lang函数。我们对库文件的大小有严格的限制,因此我们需要删除任何未使用的代码。

我们所寻求的是一种从模块中提取某些功能并将这些功能构建到单个javascript文件中的方法。例如,假设我们需要dojo.mixindojo.declaredojo.hitch函数,那么这些函数的声明及其相关的内部函数应该构建在一个文件中。

有什么建议吗?

从我的测试结果中更新

感谢Stephen Chung就如何解决这个问题提出了很好的建议。

所以基本上我创建了一个包含四个模块的自定义dojo构建:dojo._base.xhrdojo._base.jsondojo._base.declaredojo._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。但对于其他情况,这仍然是一个非常好的解决方案。

2 个答案:

答案 0 :(得分:1)

Dojo Core以非常紧凑的方式编写,具有大量交叉调用(即一个函数调用其他函数),以便节省下载字节并减少代码大小。

因此,您需要一组最小的Dojo Core函数以及它调用的函数。

换句话说,您需要的是包含Dojo Core的构建,但删除任何从未调用的死代码。

我建议你不要自己从头开始创建一个最小的库。您需要的是使用Closure Compiler的高级模式来处理您的Dojo应用程序。它会删除死代码,优化整个应用程序,并对其进行完全混淆。

是的,可以在高级模式下使用带有Dojo的Closure Compiler - Dojo可能是唯一能够做到这一点的流行库。阅读here

一些统计数据:Closure编译的Dojo应用程序通常比Shrinksafe构建中的等效Dojo应用程序小约25-30%。这取决于您使用的Dojo Core功能的数量 - 通常,您可以将Dojo Core从原始大小的40%减少(即将代码大小减少多达60%),仅使用死代码删除。进一步减少更加困难,因为您可能必须开始删除Dojo加载程序等功能。

答案 1 :(得分:1)

你修好道场吗? Google的闭包库为dojo提供了一个非常相似的包管理系统,以及将javascript编译成单个“可执行文件”所需的所有必要脚本和工具。闭包库编译器可以说是你会发现的最先进的javascript minifiers之一,所以如果你的目标是简洁,简洁的javascript,这个工具可以提供很大的帮助。