Dojo vs Dijit - 要包含或引用的文件?

Posted

技术标签:

【中文标题】Dojo vs Dijit - 要包含或引用的文件?【英文标题】:Dojo vs Dijit - files to include or reference? 【发布时间】:2009-08-27 19:51:13 【问题描述】:

我一直在阅读 O'Reilly 的书“Dojo - The Definitive Guid”,但有些东西对我来说仍然不确定。

他们谈论“引导”和从 AOL CDN 获取 dojo.css”。

当我在我的机器上进行测试时,我应该使用 CDN 吗?还是我应该等待并仅在部署时使用它?

其次,这本书谈到了 Dojo 的 CDN,而不是 dijit。

我在 Google App Engine (GAE) 上进行开发 - 因此在我的 javascript 目录中拥有 2000 多个 Dojo/Dijit 文件有点烦人,因为它每次都会减慢我上传到 GAE 的速度。

Firebug 给我这个错误: GET http://localhost:8080/dijit/nls/dijit-all_en-us.js 404 未找到 GET http://localhost:8080/dijit/_editor/plugins/FontChoice.js 404 未找到

我从这里下载了示例: http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html?theme=soria 我想“简单地”让它在我的机器上运行在本地谷歌应用引擎下(这是你在上面的 URL 中看到的 localhost:8080)。

我看到这个语句可能导致上面的第二个 404: dojo.require("dijit._editor.plugins.FontChoice");

另一个错误: 无法访问优化的闭包 preload("en-us") dijit-all.js(第 479 行) 匿名(“dijit.nls.dijit-all”,[“ROOT”,“ar”,“ca”,还有 40 个... 0=ROOT 1=ar 2=ca 3=cs 4=da 5=de 6= de-de 7=el 8=en 9=en-gb])dijit-all.js(第 489 行) dijit-all.js() dojo.i18n._searchLocalePath(locale, true, function(loc)\n

现在要继续,我将尝试复制整个 dijit 库,但有没有解决方案?

我当前的脚本包括如下所示:

<script type="text/javascript" src="/javascript/dijit.js"></script>

<script type="text/javascript" src="/javascript/dijit-all.js" charset="utf-8"></script>

我通过复制 dijit.js.uncompressed.js 并将其重命名为 dijit.js 获得了 dijit.js 文件。

【问题讨论】:

【参考方案1】:

实际上你有几个选择:

    您可以将 CDN 用于所有内容(尽管在本地使用完整源代码确实会为您提供更好的错误消息)。 Google has them as well。 Dijit 在这里:http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/dijit.js 仅供参考。在我看来,这有很多好处。 JS的用户缓存是主要的。

    构建分层文件。我认为 O'Reilly 的书有一个关于它的部分,但 PragProg book 在这方面 IMO 更好。还有这个doc on dojocampus.org 关于建筑。这将减少您需要上传到 GAE 的文件并加速您的应用程序加载。这实际上是我为了减少 HTTP 请求所做的。

    继续做你正在做的事情。 :)

关于您看到的有关 en-us 文件的 404 错误,基本上是无害的。 Here's a better description.

您也可能正在使用 dijit.uncompressed.js 和 dijit-all.js 重新加载 dijit 文件,并导致过程中出现问题...但我不确定这个。

【讨论】:

【参考方案2】:

我只是想澄清一下,在使用 CDN 时,您只需要包含主要的 Dojo 脚本。当您dojo.require()他们时,其余的将自动拉入。

如果出于某些(技术)原因您不想使用 X-Domain 加载器(CDN 使用这种类型的加载器),您可以进行自定义构建(在许多地方都有详细描述)。在构建之后,您将仅相关文件复制到您的服务器。无需复制所有 2000 多个测试、演示、未使用的 DojoX 项目、Dijits 等。

在构建期间,您将创建一个缩小的文件(或几层),其中将包含您使用的所有 Dojo JavaScript 代码。如果您使用 Dojo 小部件,它们的模板将已经内联,因此您不会对它们产生点击。作为构建的一部分,CSS 文件也被组合在一起并被缩小。因此,从字面上看,在大多数情况下,您将只有两个文件:一个 Dojo 层,其中包括所有内容 + 您的自定义代码,以及一个 CSS 文件。在更复杂的情况下,您可能有更多文件,但通常我们谈论的是少数。

如何确保所有内容都在构建中?启动你最喜欢的网络分析器(Live HTTP Headers、Firebug、Fiddler2 或 Charles Proxy 就可以了),看看你是否点击了构建之外的任何文件。如果你这样做了 - 将它们包含在构建中,或者尝试找出请求它们的原因,并消除这些请求(一些与本地化相关的调用很好)。

就我个人而言,我会从 CDN 选项开始 — 效果很好,没有麻烦,由其他有胖管道的人托管。

【讨论】:

【参考方案3】:

要解决您的第一个问题,请在本地使用完整的源代码版本进行开发,这样您可以获得更清晰的调试信息,这些信息指向源代码中清晰的行,而不是缩小版本缩减为的单行。使用 CDN 进行生产。

【讨论】:

以上是关于Dojo vs Dijit - 要包含或引用的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dojo javascript 文件导入 worklight 应用程序?

Dojo/Dijit - 如何在布局控件上允许垂直滚动

您可以同时使用 Dojo.Build 和 CDN 吗?

请求已内联 Dijit 模板的 Dojo 构建

代码在错误的地方寻找模块

dojo / mvc / at不以约束datePattern的格式返回dijit / form / DateTextBox