我怎样才能提高非持久性CGI进程驼鹿的表现?(How can I improve Moose performance in non-persistent CGI processes?)

穆斯是一个奇妙的对象框架。 麻烦的是,与它的依赖一起,这是非常大的。 我们的分析表明,我们的平台上,只需加载驼鹿会招致非持久性CGI应用程序脚本5-6秒的开销。 这只是不是这些一次性的应用程序可以接受的。

相反,当我们使用一个持久的过程系统(如FCGI),这个启动开销被消除(或者更确切地说,只发生一次),一切都很好。 我们的问题是,我们不能保证所有的我们的代码将始终在持续的进程中运行。

我们调查了使用鼠标作为一个功能有限投递更换驼鹿,但事实证明(如提及这个答案 ),这不是一个可行的选择。 我们写有驼鹿工作的任何图书馆将无法在微妙但重要的方式与鼠标的工作。 我们真的不希望到餐桌所有的模块,这样我们就可以在持久的环境和鼠标的“香草” CGI支持驼鹿。

鉴于此,我们有以下几种选择:

  1. 叉我们的内部模块 ,无论是穆斯或鼠标的工作,适当的。 (呸!)
  2. 只有发展我们的模块FCGI /驼鹿 。 不支持“香草” CGI了。 如果我们有写不属于持久性脚本,他们将不能够充分利用我们的内部模块。
  3. 不要使用任何穆斯或鼠标 ,但一些其他的对象框架。

哪个选项是最好的? 现在我们倾向于2,我们就吸起来,如果我们要得到的东西正在运行的香草CGI。 怎么样其他框架? 还有什么更轻巧,我们应该看什么?

Answer 1:

我更倾向于将下降香草CGI支持。 FCGI托管是很便宜的这些天,我们没有理由去迎合香草CGI(IMO),因为它只是强化了Perl是缓慢的意见。 但是,如果你无法避免它,那么你可以使用类似对象::微小 。 但是,如果你需要的角色,约束,元编程和所有穆斯提供其他的可爱,你的运气,除非你把香草CGI。



Answer 2:

你可以写使用穆斯后端服务器应用程序,然后写查询后端非常小的,简单的CGI脚本。

+-------+    +--------------+
| Small |===>|  Persistent  |
|  CGI  |<===| Moose Server |
+-------+  ^  +--------------+
           |
         Socket
       Connection

这是更多或更少的FCGI做什么,所以它可能更有意义,只是使用FCGI。

在另一方面,也有可能是具有可以有需要狂奔任何抽象接口一个非CGI后端服务器真正的实惠。

例如,如果使用TCP(或UDP)套接字,那么你可以有一个本地桌面应用程序打相同的后台为你的CGI。

什么是最适合你的情况真的取决于你的具体情况。 根据情况的细节,我可以看到自己决定使用这种方法或任何你在上面勾勒出的方法的。



Answer 3:

我的建议是去与选项#2,然后帮助我们重构穆斯使CGI变得可行。 弗鲁目前正在对麋鹿测试套件,以使MooseX ::鹿角项目,应减少最,这意味着麋鹿不可用于CGI环境的开销。

马特·特劳特(MST),该男子目前暂列MooseX ::鹿角,已表示要能如果neccessary到在CGI环境中运行的应用程序的愿望。 我建议坚持使用FCGI现在和他纠缠你可以做些什么来帮帮忙!



Answer 4:

乔纳森乐伟写了一篇关于APP :: Peristent (其中,奇怪的是,是不是在CPAN)几个月前。 我没有用它,但基于他的上述链接博客文章,它看起来提供了相当透明的服务器 - 客户端架构,你可以换你的CGI的实际处理英寸



Answer 5:

的基本思想App::PersistentpperlSpeedyCGI ,可能有一些人是你的编译Perl程序,以字节码的过程只进行一次,并某种缓存是在后调用使用。 由于麋鹿是说,有相当多的编译时间损失,我第一次尝试这种方法。

我已经成功地使用pperl抽签的MRTG一个古老的制度2001年周围的Perl程序是为这是一个相当开销每个图形执行图形上-这大概相当于你的CGI场景。



Answer 6:

还有另一种选择- PPerl

我从来没有使用它,但它肯定看起来有趣。 又是谁写它的人(太警长又名波特) - 它可以让你的好质量的代码切实保障。