沿着与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?这将有助于搜索。