Moose是一个很棒的对象框架。问题在于,连同它的依赖关系,它非常大。我们的分析表明,在我们的平台上,简单地加载 Moose 将在非持久 CGI 应用程序脚本上产生 5-6 秒的开销。对于这些一次性应用程序来说,这是不可接受的。
相比之下,当我们使用持久化进程系统(如 FCGI)时,这种启动开销就被消除了(或者更确切地说,只发生一次),一切都很好。我们遇到的问题是我们不能保证我们所有的代码总是在一个持久化进程下运行。
我们调查了使用鼠标作为 Moose 的功能受限的替代品,但事实证明(如本答案中所述)这不是一个可行的选择。我们编写的任何与 Moose 一起使用的库都无法以微妙但重要的方式与 Mouse 一起使用。而且我们真的不想分叉我们所有的模块,这样我们就可以同时支持持久环境中的 Moose 和用于“香草”CGI 的鼠标。
鉴于此,我们有以下选择:
- 酌情分叉我们的内部模块以与 Moose 或 Mouse 一起使用。(呸!)
- 只为 FCGI/Moose 开发我们的模块。不再支持“香草”CGI。如果我们必须编写不持久的脚本,他们将无法利用我们的内部模块。
- 不要使用 Moose 或 Mouse,而是使用其他一些对象框架。
哪个选项最好?我们现在倾向于 2,如果我们必须让某些东西像普通 CGI 一样运行,我们只会把它吸干。其他框架呢?还有什么更轻量级的我们应该关注的吗?