为什么 JS 模块在浏览器和服务器中加载不同(异步和同步)?
Why do JS modules load differently (async & sync) in a browser vs a server?
我最近读了这个:"ECMAScript 6 modules must work independently of whether the engine loads modules synchronously (e.g. on servers) or asynchronously (e.g. in browsers)."
为什么 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。最好让浏览器的线程自由响应用户(并显示加载动画等),同时在后台安静地加载模块并异步响应它们的完成。
我最近读了这个:"ECMAScript 6 modules must work independently of whether the engine loads modules synchronously (e.g. on servers) or asynchronously (e.g. in browsers)."
为什么 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。最好让浏览器的线程自由响应用户(并显示加载动画等),同时在后台安静地加载模块并异步响应它们的完成。