【问题标题】:What does synchronous vs asynchronous loading mean?同步与异步加载是什么意思?
【发布时间】:2017-11-17 06:53:32
【问题描述】:

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

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

异步模块定义 (AMD):最流行的 这个标准的实现是RequireJS。特征: 稍微复杂的语法,使 AMD 无需 eval() 也能工作 (或编译步骤)专为异步加载和浏览器设计

【问题讨论】:

    标签: javascript node.js asynchronous amd commonjs


    【解决方案1】:

    同步编程是逐行执行代码。与加载相同。 无论您正在加载什么,它都会一一加载。 现实世界的例子:你在电影院排队买电影票。 异步会有很多人在餐厅。你点菜,其他人点菜。他们不需要等待您的订单完成。 每个人都可以订购,但您不知道订单何时到来。与加载相同。您可以同时或不同的时间间隔加载多个内容,但不能保证它会按该顺序出现。 我希望解释足够好。

    【讨论】:

      【解决方案2】:

      CommonJS 加载模块的语法如下:

      var MyModule = require("MyModule");
      

      如您所见,这将阻塞线程,直到从您的文件系统或 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 函数并传入初始化的模块。

      【讨论】:

      • 所以使用requireJS,图形仍然可以用任何已经加载和执行的代码来更新,然后当其他代码被加载和执行时它会告诉客户端再次更新图形?
      • @stackjlei 使用 RequireJS,是的,图形(以及其他所有内容)仍然可以更新,并且您的浏览器不会挂起。另一方面,CommonJS 语法不能直接使用,因为在下载脚本时浏览器会冻结,所以通常你的代码会被转译,将所有脚本合并到一个文件中。 RequireJS 非常适合动态加载脚本。简而言之,异步意味着“在不同的线程中运行”(尽管从技术上讲它仍然是同一个线程。)有些人可能会调用同步 blocking 和异步 nonblocking
      猜你喜欢
      • 2010-11-08
      • 2011-03-24
      • 2014-02-24
      • 2013-11-26
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多