【发布时间】:2012-12-16 16:22:32
【问题描述】:
在加载 CommonJS 模块时,我们使用 require 语句,这是同步的。
但是加载模块不涉及从磁盘读取它们并解释它们。那么在我们提倡非阻塞 I/O 的设置中,require 怎么会是同步的呢?
更新:
我已经在客户端中看到并使用过 requireJS,并且可以欣赏它的异步特性。我想知道的是为什么在服务器上做这种事情并不普遍(我知道 requireJS 可以在 Node 中使用,但这不是重点)。
另外我想知道在我的代码中要求内联模块是否会导致我的代码阻塞,这是否是一种不好的做法,应该避免。
【问题讨论】:
-
大多数情况下,
require用于加载依赖项。并且依赖项必须存在,以便它们的依赖项起作用。因此同步加载。 -
@MichaelBerkowski 是的,但我可以做类似的事情:
require('crypto').createHash('md5').update(pwd+salt).digest("hex")在函数体内内联。它会让我的代码阻塞吗? -
@lorefnon 第一次将被阻塞,所有后续的将从缓存中提供(但 node.js 文档没有说明这到底是如何工作的)。但你为什么要这样做?只需像其他人一样需要文件顶部的加密库。
-
@Prinzhorn 感谢您对缓存的关注...如果您可以将其发布为答案,我很乐意接受。
标签: javascript node.js commonjs