2

我正在着手开发一个新版本的移动网站。我正在研究使用 amd 脚本加载器,并且已经将其范围缩小到 require 和 lsjs。我知道两者都有很多优点和缺点,但我正试图为我的网站的移动版本找出所有这些。有没有人在移动级别有这个库的经验?只是想在这里讨论人们认为最好的方法是什么。(任何拥有 1500 代表的人都想创建一个 lsjs 标签 :))。也许这些库的创建者中的任何一个(托德伯克或理查德巴克豪斯)对此有意见

谢谢

编辑:

感谢 Simon Smith 在下面提供的重要信息。有人用过lsjs吗?它在速度方面看起来很有前途,但没有用户群、文档或(我认为)require/curl 的功能,但看起来仍然很有前途

4

2 回答 2

2

我会说在你准备好投入生产之前使用 RequireJS。然后编译你的脚本并将 RequireJS 替换为 Almond。它是由 James Burke(RequireJS 的作者)制作的一个简单的库,因此您可以依靠它无缝地工作:

一些开发人员喜欢使用 AMD API 来编写模块化 JavaScript,但在进行了优化构建之后,他们不想包含像 RequireJS 这样的完整 AMD 加载程序,因为他们不需要所有这些功能。某些用例(例如移动设备)对文件大小非常敏感。

通过在构建文件中包含杏仁,不需要 RequireJS。使用 Closure Compiler 压缩并压缩后,almond 大约为 1 KB。

https://github.com/jrburke/almond

编辑:

Curl.js 也是一种选择。我没有使用过它,但知道它比 RequireJS 小很多。做了一些研究以了解原因:

RequireJS 通过 Curl 执行以下操作(通过 James Burke):

  • 支持多版本/上下文,对模拟测试很有用,但你可以不用它
  • 支持通过 require 加载纯 JS 文件,不必是 AMD 模块
  • 支持特殊检测并与旧版本的 jQuery 一起工作(如果您使用 jQuery 1.7.1 或更高版本,这应该不是问题)
  • (目前)更好地支持简化包装的 commonjs 样式:define(function(require) {});

简而言之,如果您只打算在应用程序中处理 AMD 模块,不需要多版本/上下文支持,并且不使用简化的 commonjs 包装样式,或者使用较旧的 jQuery,那么 curl 可能是一个不错的选择。

https://groups.google.com/forum/?fromgroups=#!topic/requirejs/niUyLZrivgs

Curl的作者:

RequireJS 在比 curl.js 更多的地方运行,包括 WebWorkers 和 node.js。它也比 curl.js 有更多的“战斗测试”,这可能意味着它在边缘情况下的错误更少。curl.js 还缺少一些重要功能,例如隐式依赖项的预加载和对 AMD 包装的 commonjs 模块的支持。这些都将在 0.6 版(下周晚些时候)中出现。

从好的方面来说,curl.js ......

大小只有 RequireJS 的 1/4 ——即使与 js 捆绑在一起!和domReady!插件它仍然不到一半的大小。

在加载模块方面比 RequireJS 更快,但只有在 IE6-8 或开发(非构建)环境中才有意义。

支持 AMD 以外的格式的可插拔模块加载器(例如,我们正在开发未包装的 CJSM/1.1 和 CJSM/2.0)。

通过 IOC 容器(如wire.js(通过 cram.js))支持基于配置的依赖管理。

支持 css 内联(通过 cram.js)和 css 连接(通过 cram.js 0.3 年底)

https://github.com/cujojs/curl/issues/35#issuecomment-2954344

于 2013-02-20T23:05:36.097 回答
0

Back in 2014 I faced the same problem. I had some extra requirements though in order to make the site fast on mobile:

  • Small enough to be inlined (to avoid paying an extra request-tax to get the loader onboard).
  • Inlined config file (get rid of a request).
  • Config file in pure javascript (no parsing overhead).
  • Let the browser do the actual loading (browsers are smart these days) of files.
  • Connect all asynchronously loaded modules together.
  • Support for single page apps that include legacy code that uses sprinkled $(function(){...}) constructs, yet I insist on loading jQuery late and asynchronously to speed things up.

After evaluating RequireJS, curl, lsjs and a bunch of others, I concluded that none of them came close enough to what I needed for my projects. Eventually I decided to create my own lockandload AMD-loader. I didn't open-source it at the time, because that meant writing documentation. But I recently open-sourced it with fresh docs in case it benefits others.

于 2018-09-18T07:49:21.410 回答