Node.JS vm.runInNewContext()vs require()和eval()

时间:2012-03-26 05:31:17

标签: node.js eval v8

  • vm.runInNewContext是否像eval一样被视为黑魔法?
  • 有没有 require和阅读a之间的显着性能差异 文件并使用vm来运行它或在引擎盖下是相同的(如果 你实现了缓存等,只是想添加一些变量 上下文)

2 个答案:

答案 0 :(得分:9)

如果您查看implements loading Modules in node.js代码,则会看到需要使用vm.runInNewContextvm.runInThisContext。然而,require会做一些其他额外的事情,比如缓存模块。

node documentation显示了vm命令和eval之间行为的相似和不同。

因此,require,eval和vm都有点不同,但都可以用来加载代码。如果您加载来自客户端的任意代码,它们都会有类似的安全问题。

答案 1 :(得分:4)

runInNewContext并不是要用来代替requireeval,而是用来创建一个可以安全地运行其他脚本的沙箱环境。

缺点是它很慢(创建需要大约10毫秒)并占用几兆字节。所以不,不要将它用作require替代品。