同步加异步加载意味着什么?

时间:2017-11-17 06:53:32

标签: javascript node.js asynchronous amd commonjs

从这个site读取,我知道使用commonjs意味着当浏览器完成下载文件时,它们必须逐个加载它们,因为它们相互依赖。但是对于AMD,它可以同时加载多个,这样即使文件a依赖于文件b,文件a的一部分也可以在文件b完成之前执行?

  

CommonJS模块:该标准的主要实现在于   Node.js(Node.js模块有一些超出CommonJS的功能)。   特点:紧凑的语法设计用于同步加载和   服务器

     

异步模块定义(AMD):最受欢迎   这个标准的实施是RequireJS。特点:   稍微复杂的语法,使AMD能够在没有eval()的情况下工作   (或编译步骤)专为异步加载和浏览器而设计

2 个答案:

答案 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函数并传入初始化的模块。