javascript - 在功能级别自定义 dojo 构建

标签 javascript build dojo

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

Dojo 提供自定义构建机制,但它在模块级别上工作。例如,在自定义构建中,您可以指定只在 dojo 库中添加 lang 模块。但是我们可能只需要lang模块中的dojo.hitch函数,而不需要中也包含的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 的大小限制。但对于其他情况,这仍然是一个非常好的解决方案。

最佳答案

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/

相关文章:

build - 升级 ffmpeg 时处理 ffmpeg 库接口(interface)更改

google-chrome - 谷歌浏览器网页刷新中断

javascript - 检测在 Android Stock 浏览器上作为主屏幕应用程序运行的 Web 应用程序

javascript - 从一个类的另一个类创建一个变量

javascript - 刷新动态路由时,Nuxt 应用程序返回 404(Tomcat 服务器)

javascript - 如何查看关联的点击功能码

javascript - 如何从 Dojo 层加载 AMD 模块

Android Gradle 构建 : renaming the apk

javascript - 如何禁用 dijit 确认对话框按钮

css - 可以通过 URL 访问 CSS 文件,但不能从 HTML 访问