从这个site读取,我知道使用commonjs意味着当浏览器完成下载文件时,它们必须逐个加载它们,因为它们相互依赖。但是对于AMD,它可以同时加载多个,这样即使文件a依赖于文件b,文件a的一部分也可以在文件b完成之前执行?
CommonJS模块:该标准的主要实现在于 Node.js(Node.js模块有一些超出CommonJS的功能)。 特点:紧凑的语法设计用于同步加载和 服务器
异步模块定义(AMD):最受欢迎 这个标准的实施是RequireJS。特点: 稍微复杂的语法,使AMD能够在没有eval()的情况下工作 (或编译步骤)专为异步加载和浏览器而设计
答案 0 :(得分:2)
同步编程逐行执行代码。与加载相同。 无论你加载什么,它都会逐个加载。 现实世界的例子:你在电影院排队等待电影票。 异步会在餐厅很多人。你点了食物和其他人点菜。他们不需要等待您的订单完成。 每个人都可以订购,但你不知道订单什么时候到来。与加载相同。您可以同时或不同的间隔加载多个东西,但它不能保证它将按顺序加载。 我希望这个解释很好。
答案 1 :(得分:2)
加载模块中CommonJS的语法是这样的:
var MyModule = require("MyModule");
正如您所看到的,这将阻止线程,直到从文件系统或Web下载模块。这称为同步加载。在不影响用户体验的情况下,在普通的Web浏览器环境中无法实现这一点,因为我们无法在浏览器使用线程更新图形时阻止该线程。
使用RequireJS,它就是这样完成的:
// In your module
define(["dependencies", ...], function(){
return MyModule;
})
// In your web page
require(["dependencies", ...], function(MyModules, ...){
// do stuff here
});
使用此模型,我们的网页不依赖于何时加载模块的时间。我们可以在页面仍然加载时并行加载我们的脚本。这称为异步加载。加载脚本后,他们将调用define
,通知RequireJS脚本确实已加载并执行。然后RequireJS将调用您的main函数并传入初始化的模块。