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

Javascript 为什么JS模块在浏览器和服务器中的加载方式不同(异步和同步)?,javascript,node.js,ecmascript-6,v8,Javascript,Node.js,Ecmascript 6,V8,我最近读到:“ECMAScript 6模块必须独立于引擎是同步加载模块(例如在服务器上)还是异步加载模块(例如在浏览器中)而工作。” 为什么JS分别在服务器和浏览器中异步和同步加载?这是故意的吗?服务器更喜欢同步导入模块,因为它们可以从文件系统快速加载。通常,同步代码更易于编写和读取。在Node中能够做到以下几点非常好: var myModule = require("mymodule"), foo = require("foo"); myModule.doThing(foo); 而不

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


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

服务器更喜欢同步导入模块,因为它们可以从文件系统快速加载。通常,同步代码更易于编写和读取。在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。最好保持浏览器线程自由以响应用户(并显示加载动画等),同时在后台安静加载模块并异步响应模块完成。

服务器更喜欢同步导入模块,因为它们从文件系统快速加载。通常,同步代码更易于编写和读取。在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。最好保持浏览器线程自由以响应用户(并显示加载动画等),同时在后台安静加载模块并异步响应模块的完成。

在服务器上,模块文件从文件系统(快速)加载,而在浏览器中,则通过网络加载(速度较慢,因此异步加载它们可能比让页面挂起在网络上更有利)。这就是您要寻找的答案,还是更技术性的东西,例如,实际使用什么API或代码来执行加载?服务器可以直接访问文件系统,并直接从硬盘加载模块。它不需要异步,因为它只受硬件速度的限制。另一方面,浏览器也不需要异步受网络速度的极大限制。他们不能一直阻止用户界面,因为他们在等待加载某些文件,所以他们必须异步加载。@JeremyThille服务器不异步加载有什么原因吗?这似乎不会有什么坏处。我正在试着理解两者之间的折衷。@apsillers是的!a实际上,如果您使用api加载每个环境中的模块,那将非常有趣。服务器从应用程序加载所有文件和模块,然后启动应用程序。另一方面,浏览器一次下载一个站点的部分。在服务器上,模块文件从文件系统加载(快速),而在浏览器中,它们是通过网络加载的(速度较慢,因此异步加载它们可能比让页面挂起在网络上更有利)。这就是您要寻找的答案,还是更技术性的东西,例如,实际使用什么API或代码来执行加载?服务器可以直接访问文件系统,并直接从硬盘加载模块。它不需要异步,因为它只受硬件速度的限制。另一方面,浏览器也不需要异步受网络速度的极大限制。他们不能一直阻止用户界面,因为他们在等待加载某些文件,所以他们必须异步加载。@JeremyThille服务器不异步加载有什么原因吗?这似乎不会有什么坏处。我正在试着理解两者之间的折衷。@apsillers是的!a实际上,如果您使用api加载每个环境中的模块,那将非常有趣。服务器从应用程序加载所有文件和模块,然后启动应用程序。另一方面,浏览器一次下载一个站点的部分。