Moose http://search.cpan.org/dist/Moose/是一个很棒的对象框架。问题在于,连同它的依赖项一起,它是very大的。我们的分析表明,在我们的平台上,仅加载 Moose 就会在非持久性 CGI 应用程序脚本上产生 5-6 秒的开销。对于这些一次性应用程序来说,这是不可接受的。
相比之下,当我们使用持久进程系统(例如 FCGI)时,这种启动开销就被消除了(或者更确切地说,只发生一次),一切都很好。我们面临的问题是,我们无法保证所有代码始终在持久进程下运行。
我们调查使用Mouse http://search.cpan.org/dist/Mouse/作为 Moose 的功能有限的替代品,但事实证明(如这个答案 https://stackoverflow.com/questions/591767/migrating-from-moose-to-mouse-in-perl-mouse-not-executing-build/622504#622504)这不是一个可行的选择。我们编写的与 Moose 一起使用的任何库都无法以微妙但重要的方式与 Mouse 一起使用。和我们really不想分叉我们所有的模块,以便我们可以在持久环境中支持 Moose,并在“普通”CGI 中支持 Mouse。
鉴于此,我们有以下选择:
-
分叉我们的内部模块根据需要使用 Moose 或 Mouse。 (哎呀!)
-
只为 FCGI/Moose 开发我们的模块。不再支持“普通”CGI。如果我们必须编写非持久性的脚本,他们将无法利用我们的内部模块。
-
不要使用 Moose 或 Mouse,但还有一些其他对象框架。
哪个选项最好?我们现在倾向于 2,如果我们必须让某些东西作为普通 CGI 运行,我们就会接受它。其他框架怎么样?我们应该关注更轻量级的东西吗?
我的偏好是放弃普通 CGI 支持。如今 FCGI 托管确实很便宜,没有理由迎合普通的 CGI (IMO),因为它只会强化 Perl 速度慢的观点。但如果你无法避免它,那么你可以使用类似的东西对象::微小 http://search.cpan.org/perldoc?Object::Tiny。但如果您需要角色、约束、元编程以及 Moose 提供的所有其他可爱功能,那么除非您放弃普通的 CGI,否则您就不走运了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)