Node.JS vm.runInNewContext () против require () и eval () - PullRequest
7 голосов
/ 26 марта 2012
  • Считается ли vm.runInNewContext черной магией как eval?
  • Есть ли существенная разница в производительности между require и чтением файла и использованием vm для его запуска илито же самое под капотом (если вы реализовали кеширование и т. д. и просто хотели добавить некоторые переменные в контекст)

Ответы [ 2 ]

9 голосов
/ 06 июня 2014

Если вы посмотрите код, который реализует загрузку модулей в node.js , вы увидите, что требуется использовать vm.runInNewContext или vm.runInThisContext под капотом.require, однако, выполняет некоторые другие дополнительные функции, такие как кэширование модуля.

Документация узла показывает, как поведение похоже и отличается между командами vm и eval.

Итак, require, eval и vm немного отличаются, но все они могут использоваться для загрузки кода.Все они имеют схожие проблемы безопасности, если вы загружаете произвольный код, исходящий от клиента.

4 голосов
/ 26 марта 2012

runInNewContext не предназначен для использования вместо require или eval, но вместо этого для создания среды песочницы, в которой вы можете безопасно запускать другие сценарии.

Недостаткичто это медленно (создание занимает ~ 10 мс.) и занимает пару мегабайт.Так что нет, не используйте его как замену require.

...