代码之家  ›  专栏  ›  技术社区  ›  Sua Morales

为什么JS模块在浏览器和服务器中的加载不同(异步和同步)?

  •  0
  • Sua Morales  · 技术社区  · 7 年前

    我最近读到:“ECMAScript 6模块必须独立工作,无论引擎是同步加载模块(例如在服务器上)还是异步加载模块(例如在浏览器中)。”

    为什么JS分别在服务器和浏览器中异步和同步加载?这是故意的吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   apsillers    7 年前

    服务器更喜欢同步导入模块,因为它们可以从文件系统快速加载。通常,同步代码更易于编写和读取。在Node中能够做到以下几点很好:

    var myModule = require("mymodule"),
        foo = require("foo");
    myModule.doThing(foo);
    

    而不是

    require("mymodule", function(err, myModule) {
        require("foo", function(err, foo) {
            myModule.doThing(foo);
        });
    });
    

    相反,异步代码在浏览器中通常更可取,因为网络负载可能需要更长的时间,而同步执行会阻塞UI。最好保持浏览器线程自由以响应用户(并显示加载动画等),同时在后台悄悄加载模块并异步响应其完成。