- vm.runInNewContextは
eval
のような黒い魔法と見なされますか? require
と ファイルを読み込み、それを実行するためにvm
を使用して、またはフードの下に同じである(あなたは、キャッシングなどを実施し、ちょうど コンテキストにいくつかの変数を追加したい 場合)との間に 大幅なパフォーマンスの違いがあります
答えて
runInNewContext
は、代わりにあなたが安全に他のスクリプトを実行できるサンドボックス環境を作成する方法として、require
またはeval
の代替として使用されるものではありません。
短所(作成には10ミリ秒かかります)が短く、数メガバイトを要します。そう、いいえ、それを交換するrequire
として使用しないでください。
コードimplements loading Modules in node.jsをチェックすると、vm.runInNewContextまたはvm.runInThisContextが必要です。しかし、require
は、モジュールをキャッシュするようないくつかの余分なことをします。
node documentationは、動作がvmコマンドとevalでどのように類似していて異なるかを示しています。
したがって、evalとvmはすべて少し異なりますが、すべてを使用してコードをロードできます。クライアントから来る任意のコードを読み込んでいる場合、それらはすべて同様のセキュリティ問題を抱えています。
上記のnode.jsへのソースコードリンクは "古代"なので、もっと最近の7.10.0ソースコードリンクがあります:https://github.com/nodejs/node/blob/v7.10.0 /lib/module.js#L543これらは 'vm.runInThisContext'または' vm.runInDebugContext'を使います。 'eval'について'(0、eval)(....)のようなカンマ式を使うと、グローバルスコープで評価されたスクリプトを取得して、node.js docuリンクの例に示すようにローカルスコープを汚染することができますあなたはページ上で "eval"を検索します。 –
- 1. Node.js require()とRequireJS? RequireJSと
- 2. RequireJs - Define vs Require
- 3. PHP require vs grails include
- 4. autoload vs include or require in php
- 5. Node.js res.send VS res.end VS return res.end
- 6. Node.js Express vs. Flatiron
- 7. node.js - res.end vs fs.createWriteStream
- 8. node.jsタイミング:process.hrtime()vs new Date()。getTime()?
- 9. チキンスキームでvs RequireとNeed-extensionを使用する
- 10. node.jsのSocket.io vs netクラス
- 11. Mysql Order By VS. Node.js sort
- 12. Node.js:非同期コールバックvs同期コールバックvs process.nextTick vs setTimeout
- 13. Node.js - NPMパッケージzmq vs zeromq
- 14. ASP:LinkButtonとEval
- 15. JSON.parseとeval()
- 16. Eval()と式コード
- 17. Python eval()とexec()
- 18. Node.js "require" - 重複した実行を避ける
- 19. node.jsに同じモジュールが必要な場合のrequire()の働き
- 20. Node.js "require" - 正確に何を行うのですか?
- 21. Node.jsのrequire関数を安全かつ適切にmonkeypatchする
- 22. Node.js - requireが定義されていない例外
- 23. node.js内の特定のオブジェクトなしでrequire( "ssh2")
- 24. node.jsの「require( 'express')()」の第2ペアのparanthesisは何ですか?
- 25. require node.jsでエラーSyntaxError:予期しない識別子
- 26. exportとrequireを使用せずにnode.jsの外部javascriptファイルを使用する
- 27. php requireと空白
- 28. タスクランナーエクスプローラを実行しているnode.jsのES 2015 VS 2015
- 29. Node.JS(Ruby対Javaスクリプト)vs Ruby On Rails
- 30. パフォーマンス/レイテンシの違い - Node.jsのダイナミックvsスタティックルート
コントローラオブジェクト( '/ controllers/blog_controller.js')をロードしてコンテキスト内にヘルパーを含める場合、パフォーマンスペナルティはほとんどありません。 (コントローラーは一度だけロードされます) –
ただしないでください。それは一般的な事のための非常に悪い習慣と考えられている。自分のコントローラコードをサンドボックス化する必要があると思われるのはなぜですか? –
railway-jsがそれを使ってコントローラにもっと豊かなコンテキストを提供するのと同じ理由で、 'vm'を使うよりも私が好きな良い解決策が見つかりました。ありがとう! –