沿着與rubygem Spork相同的路線,您是否可以分叉節點進程並使其基本上成爲當前環境的完整克隆? 「完整克隆」我的意思是這個克隆/子進程環境/進程可以重用現有的require.cache
,所以子進程不需要再次需要相同模塊的性能衝擊(有時是痛苦的)。比如說,require('lib-a')
需要2秒加載。當你在子進程中調用require('lib-a')
時,你如何做到這一點,它是即時的(也就是使用require.cache
或類似的東西)?在不同進程之間共享Node.js環境?
一個用例是爲了加快節點express/connect HTTP服務器的啓動時間。在更復雜的應用程序中,您可能需要預先設置大量模塊,有時需要花費一兩秒時間才能完成require
所有這些應用程序(並非尋找有關如何延遲加載模塊的信息,我也在進行優化,但它有其侷限性)。
相關叉勺代碼是這樣的:
https://github.com/sporkrb/spork/blob/master/lib/spork/forker.rb
我不知道到底是什麼它與像Marshal.dump(yield, @child_io)
和Marshal.load(@child_io)
代碼做什麼,但它看起來像它以某種方式複製整個環境到子進程。通過這樣做,Spork製作了它,所以你可以運行1個「主」Rails服務器,並「分」它來運行測試,所以你不必等待(有時10秒)讓Rails服務器啓動。你怎麼能在節點上做到這一點?可能嗎?
更新
這被認爲是一個unix socket pair?這將有助於搜索。