与 rubygem Spork一样,你可以分叉一个节点进程并让它基本上是当前环境的完整克隆吗?
“完全克隆”是指这个克隆的/子环境/进程可以重用现有require.cache
的 . 例如,require('lib-a')
加载需要 2 秒。当你调用子进程时,你是如何做到require('lib-a')
的,它是即时的(又名 usingrequire.cache
或类似的东西)?
一个用例是加快节点 express/connect HTTP 服务器的启动时间。在更复杂的应用程序中,您可能会require
预先安装大量模块,有时需要一两秒钟才能完成require
所有模块(不是在寻找有关如何延迟加载模块的信息,我也在进行优化,但它有其局限性)。
相关的 Spork 代码是这样的:
https://github.com/sporkrb/spork/blob/master/lib/spork/forker.rb
我不确定它到底对 and 之类的代码做了什么Marshal.dump(yield, @child_io)
,Marshal.load(@child_io)
但看起来它以某种方式将整个环境复制到子进程中。通过这样做,Spork 使您可以运行 1 个“主”Rails 服务器,并“分叉”它来运行测试,因此您不必等待(有时 10 秒)您的 Rails 服务器启动。你怎么能在节点中做到这一点?可能吗?
更新
这被认为是一个unix套接字对吗?这将有助于搜索。