【问题标题】:Custom dojo build at functions level功能级别的自定义 dojo 构建
【发布时间】:2011-07-25 02:10:42
【问题描述】:

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

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

我们正在寻求一种从模块中提取某些函数并将这些函数构建到单个 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 的大小限制。但这对于其他情况仍然是一个很好的解决方案。

【问题讨论】:

  • 只是出于好奇,您为什么需要这么小的构建?要在移动设备上运行它?
  • 是的。我们需要在移动设备上运行,总大小限制为 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


【解决方案1】:

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

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

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

我建议您不要自己从头开始编写一个占用空间最小的库。您需要的是使用 Closure Compiler 的高级模式来处理您的 Dojo 应用程序。它删除了死代码,优化了整个应用程序,并完全混淆了它。

是的,可以在高级模式下将 Closure Compiler 与 Dojo 一起使用——Dojo 可能是唯一可以做到这一点的流行库。阅读here

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

【讨论】:

  • @Alex,向 Bill Keese(我认为他也是 IBM 员工)询问有关将 Dojo 与 Closure 一起使用的问题。
【解决方案2】:

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

【讨论】:

  • 是的。由于法律问题和公司战略,我们不得不使用道场。
  • @Alex Cheng,数字,因为您似乎来自 IBM 中国。 :-) 一定要考虑在 Dojo 中使用 Closure Compiler(在高级模式下,不要满足于简单模式的东西)。它应该做你想做的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2014-09-08
  • 2015-11-07
相关资源
最近更新 更多