Node.JS vm.runInNewContext()vs require()和eval()
- vm.runInNewContext是否像
eval
一样被认为是黑魔法? -
require
和读取文件之间是否存在显着的性能差异,并使用vm
来运行它,或者是相同的(如果你实现caching等,只是想添加一些variables的上下文)
runInNewContext
并不意味着被用来代替require
或eval
,而是作为创build沙箱环境的一种方式,在沙箱环境中可以安全地运行其他脚本。
缺点是速度慢(创build需要10毫秒左右),占用几兆字节。 所以不,不要用它作为require
replace。
如果你签出在node.js中实现加载模块的代码,你会发现require需要使用vm.runInNewContext或者vm.runInThisContext 。 然而,这个require
做一些其他的事情,比如caching模块。
节点文档显示vm命令和eval之间的行为是如何相似和不同的。
所以,require,eval和vm都有一点不同,但都可以用来加载代码。 如果您正在加载来自客户端的任意代码,它们都有类似的安全问题。