选择一个JavaScript Asynch-Loader [关闭]


9

我一直在研究各种异步资源加载器,但不确定使用哪一个。在我工作的地方,我们有不同的小组努力,他们的类模块可能使用不同版本的jQuery(等)。因此,嵌套的依赖关系也可能不同。我对此没有控制权,因此这意味着我需要动态加载可能使用同一库的替代版本的资源。

因此,这是我的要求:

  1. 异步加载JavaScript和CSS资源文件。
  2. 管理版本之间的依存关系顺序和嵌套依存关系。
  3. 检测资源是否已经加载。
  4. 必须允许跨域加载(CDN)
  5. (可选)允许我们卸载资源。

我一直在看:

我可以通过将版本加载到适当命名的变量中并使用数组来跟踪已经加载的内容来伪造这些要求,但是(希望)有人已经发明了这个要求。

所以我的问题是:

  • 您使用哪个?又为什么呢
  • 还有其他我完全满足我要求的东西吗?
  • 您觉得哪一个最有说服力且最容易使用?又为什么呢

更新:
对于那些感兴趣的人,我尝试了上面(以及更多)的所有AMD库。最后,我选择了RequireJS。整体上它更清洁,更容易...我很高兴能使用它。


对于JavaScript,我认为#5甚至不可能。从理论上讲CSS可能是可行的,但是我不确定是否有任何浏览器支持CSS。
2011年

@Mike感谢您的评论!如果异步加载程序使用对象变量跟踪和填充资源...则完全有可能。
囚犯零

是的,但是NEW构造函数将复制该对象,因此,如果您创建了一个新的调用对象,则该对象仍将存在。您为什么仍要卸载它?
隐身

@ user1525感谢您的评论!卸载资源可以节省内存。我将在几分钟内对您的评论进行一些思考,以编辑上面的问题。再次感谢!
囚犯零

jQuery已经具有getScript脚本注入功能。
zzzzBov 2011年

Answers:


7

我在严肃的项目上使用过RequireJS,我喜欢它,但这并不是要成为异步加载程序。这实际上是要成为一个模块系统。为此目的在服务中提供了异步加载。可以推送它来满足您的任何要求,但是其加载服务旨在加载模块,而不是任意文件。

异步加载JavaScript和CSS资源文件 Requirejs使用脚本标签注入(异步)加载所需的任何模块。

管理版本之间的依存关系顺序和嵌套依存关系这是RequireJS发光的地方。模块可以声明对其他模块的依赖关系,并且加载顺序将从该依赖关系声明中推断出来。还有一个订单插件,可以强制依赖项下订单。

检测资源是否已经加载 Requirejs将只加载一次模块。

必须允许跨域加载(CDN)这是可能的,但需要进行一些配置。您可以为任何模块设置一个特定的URL,它将覆盖默认位置,因此可以将其设置为CDN。

如果您使用RequireJS格式编写模块,则RequireJS效果最佳,而使用JS加载原始JavaScript效果则最低。

它还提供了一个构建过程,该过程会将您的模块合并到一个文件中以进行生产。


3

从理论上讲,您可以仅保留已加载脚本的列表,并创建一个函数来加载尚未加载的脚本。

http://jsfiddle.net/BDG/Dhdu7/2/


2
或使用Curl / RequireJS他们具有此功能和更多功能。而且您不必自己维护它;)
Raynos

您忘记提及清晰的结构和非相对包含。
隐身

2

如果您正在查看RequireJS并希望依赖CSS文件,则可以签出CSSP RequireJS插件

带填充的CSS。该项目为RequireJS项目实现了一个插件,该插件 允许模块将CSS文件列出为依赖项。这使RequireJS可以等到已知特定样式规则生效后再发布要评估的JavaScript模块。例如,如果您的JavaScript模块要求将某些在单独文件中定义的CSS规则应用到DOM上,然后再进行初始化,这将非常有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.