2

与 ruby​​gem 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套接字对吗?这将有助于搜索。

4

1 回答 1

1

节点进程旨在长期存在,所以我不认为启动时间是特别优先考虑的。这是节点哲学的核心。话虽如此,您可能想看看集群模块。它允许您启动子工作进程。它主要是为多核场景下的负载均衡而设计的,但可能对你有一些帮助。

于 2013-01-08T12:06:46.907 回答