rubygem Sporkと同じように、ノードプロセスをフォークして、基本的に現在の環境の完全なクローンにすることができますか?
「完全なクローン」とは、このクローン/子環境/プロセスが既存のを再利用できることを意味しますrequire.cache
。したがって、子プロセスは、同じモジュールを再度要求するという(場合によっては面倒な)パフォーマンスの低下を被る必要がありません。たとえば、require('lib-a')
読み込みに2秒かかるとします。子プロセスを呼び出すときに、それが瞬時に行われるようにするにはどうすればよいですかrequire('lib-a')
(別名使用require.cache
または類似のもの)?
この使用例は、ノードエクスプレス/接続HTTPサーバーの起動時間を短縮することです。より複雑なアプリではrequire
、大量のモジュールを前もって作成しrequire
、それらすべてに1〜2秒かかる場合があります(モジュールを遅延ロードする方法に関する情報を探していません。私もその最適化を行っていますが、制限があります)。
関連するSporkコードは次のとおりです。
https://github.com/sporkrb/spork/blob/master/lib/spork/forker.rb
Marshal.dump(yield, @child_io)
とのようなコードで正確に何をしているのかわかりませんMarshal.load(@child_io)
が、どういうわけか環境全体を子プロセスにコピーしているようです。そうすることで、Sporkは1つの「メイン」Railsサーバーを実行し、テストを実行するために「フォーク」できるようにしたので、Railsサーバーが起動するのを待つ必要はありません(場合によっては10秒)。ノードでそれをどのように行うことができますか?出来ますか?
アップデート
これはUNIXソケットペアと見なされますか?これは検索に役立ちます。