如何提高非持久 CGI 进程中的 Moose 性能?

2024-04-28

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。

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

  1. 分叉我们的内部模块根据需要使用 Moose 或 Mouse。 (哎呀!)
  2. 只为 FCGI/Moose 开发我们的模块。不再支持“普通”CGI。如果我们必须编写非持久性的脚本,他们将无法利用我们的内部模块。
  3. 不要使用 Moose 或 Mouse,但还有一些其他对象框架。

哪个选项最好?我们现在倾向于 2,如果我们必须让某些东西作为普通 CGI 运行,我们就会接受它。其他框架怎么样?我们应该关注更轻量级的东西吗?


我的偏好是放弃普通 CGI 支持。如今 FCGI 托管确实很便宜,没有理由迎合普通的 CGI (IMO),因为它只会强化 Perl 速度慢的观点。但如果你无法避免它,那么你可以使用类似的东西对象::微小 http://search.cpan.org/perldoc?Object::Tiny。但如果您需要角色、约束、元编程以及 Moose 提供的所有其他可爱功能,那么除非您放弃普通的 CGI,否则您就不走运了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提高非持久 CGI 进程中的 Moose 性能? 的相关文章

  • Perl OO 方法调用第一个参数值 (->)

    就 Perl OO 而言 到底做了什么 gt do 例如我拨打 main 电话 result a b gt mymethod 在我定义的包中mymethod 我使用以下内容 my class 总的来说 我显然没有向mymethod 那么哪里
  • 在 O(n) 时间内运行的指数乘法算法?

    我正在读一本算法教科书 我被这个问题难住了 假设我们要计算值 x y 其中 x 和 y 为正数 分别具有 m 和 n 位的整数 解决该问题的一种方法是执行 y 1 乘以 x 你能给出一个仅使用 O n 乘法步骤的更有效的算法吗 这会是一个分
  • 在Python中为什么ifrank:比ifrank!= 0更快:

    当我改变的时候 for i in range 0 100 rank ranks i if rank 0 pass to for i in range 0 100 rank ranks i if rank pass 我发现第二个代码效率更高
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • 如何编写更高效的代码

    世纪问题 我基本上想知道如果我将此代码编写为几个不同的变量或使用小数组 哪个会更有效 int x 34 int y 28 int z 293 vs double coordinate 3 34 28 293 我有一个坐标结构 我将按以下方式
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • WWW::Mechanize::Firefox - 如何打开多个选项卡

    我想打开两个单独的选项卡并在 Firefox 中保持打开状态 我在用WWW Mechanize Firefox 请找到下面的代码 usr bin perl w use strict use WWW Mechanize Firefox my
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 为什么 Chrome 审核建议我最小化 Cookie 大小?

    如何最小化请求的 cookie 大小 Chrome 似乎 警告我 我的 cookie 大小为 41B 这根本不是很多 但是它警告我有什么原因吗 这是一个 PHPSESSID cookie 我真的不知道如何最小化它 有任何想法吗 我的请求响应
  • glBlitFramebuffer 渲染缓冲区和渲染全屏纹理哪个更快?

    哪个更快更高效 使用 OpenGL 纹理作为 CUDA 表面并在四边形上渲染 新样式 使用渲染缓冲区作为 CUDA 表面并使用 glBlitFramebuffer 进行渲染 None
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 更改二维数组元素的值会更改整个列

    当我打印我的arrvalue 我得到了 2D 数组的正确值 但是当我退出 while 循环时 我的值都是错误的 我不确定我做错了什么 num runs n 4 x np linspace 1 1 n y np linspace 1 1 n
  • 如何设置 $!在 Perl 中

    我想在 perl 中编写一些设置 的函数 与内置 perl 函数类似 当我尝试执行此操作时 它抱怨 参数 无法创建管理员用户 在标量分配中不是数字 我试过用谷歌搜索这个 但不幸的是谷歌不会在 所以结果很难得到 if createUser a
  • 访问特征矩阵的行向量时复制或引用

    我正在使用的代码Eigen http eigen tuxfamily org index php title Main Page矩阵库 我注意到在整个代码中 有如下访问器 RowVector3f V size t vertex index
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 如何消除 jQuery Mobile 中的悬停延迟?

    我正在使用 jQuery Mobile 制作一个网站 当我将鼠标悬停在按钮上时 它会更改其类 并扩展其颜色 但感觉需要半秒左右才能完成 有没有办法减少这种延迟 您可以覆盖hoverDelay无需修改 jQuery Mobile js 库 要
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 如何缓存 ASP.NET 网站以获得更好的性能

    我是一名网页设计师 通常设计不需要更新的企业网站 所以我想将输出缓存一天 我怎样才能做到这一点 此外 任何有关在慢速服务器上提高 ASP NET 性能的建议都被接受 请注意 ASP NET 缓存有一个bug http connect mic
  • CPAN shell 内存不足。在 Unix 上如何给它更多的内存?

    我得到一个Out of memory 所有安装的消息 我以前从未使用过 cpan 并且不太确定它是如何工作的 我做了一个ulimit在 cpan 目录中 结果是无限的 这是我正在看的内容 usr bin perl MCPAN e shell
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这

随机推荐

  • SQL Server:多行的 SUM() 包括 where 子句

    我有一张如下所示的表 PropertyID Amount Type EndDate 1 100 RENT null 1 50 WATER null 1 60 ELEC null 1 10 OTHER null 2 70 RENT
  • Cakephp 验证后,所有表单字段都为空,并出现表单错误

    我有问题 我尝试填写表单 然后单击提交按钮 然后它显示表单错误 但所有文本框字段都变为空白 并且可以显示表单错误 我希望它变得与验证之前相同的值 就像我不想在验证后清除 清空值一样 我做了这样的事情 在视图中 div class regfo
  • Spark流吞吐量监控

    有没有办法监控 Spark 集群的输入和输出吞吐量 以确保集群不会被传入数据淹没和溢出 就我而言 我在 AWS EC2 上设置了 Spark 集群 所以我正在考虑使用AWS 云观察来监控网络输入 and 网络输出对于集群中的每个节点 但我的
  • 我无法使用 LWP::UserAgent 连接到任何 HTTPS 站点

    我正在尝试创建一个仅连接到网站的脚本 但是 由于某种原因 它不会连接到使用 HTTPS 的任何内容 我们在这里启用了代理 但是 我相信代理不是问题 因为如果我要连接到网络内部不通过代理建立隧道的 HTTPS 它仍然会失败 如果我要在任何不使
  • 删除多个对象 Amazon s3 PHP SDK

    我在一次删除多个对象时遇到问题 使用这个库 https github com aws aws sdk php laravel https github com aws aws sdk php laravel 我对使用该库的其他任何事情都没有
  • 无法对非静态方法进行静态引用

    使用 Java 构建多语言应用程序 插入字符串值时出现错误R string资源 XML 文件 public static final String TTT String getText R string TTT 这是错误消息 错误 无法从类
  • 绝对定位的最小高度

    我的页面 topLeft 上有一个区域设置了最小高度 在 topLeft 中 我有一个 heroBanners 部分 我希望将其锚定到 topLeft 的底部 使用position absolute 底部 0 起初 这工作正常 但是当 to
  • SQL SERVER 中是否有与 MS Access 的 VAL() 函数等效的函数?

    我在直接在 sql server 中运行代码 Access Query 时遇到问题 其中包含VAL CoLUMN NAME 经过大量谷歌搜索后 我发现了一个CAST COLUMN AS DATATYPE 取代VAL 但是当该列是文本类型并且
  • 如果不使用静态成员,静态成员变量是否在模板类中初始化?

    如果不使用静态成员 静态成员变量是否在模板类中初始化 我用它来注册类型 template
  • 如何在 Postgres 中的 JSON 字段上创建索引?

    在 PostgreSQL 9 3 Beta 2 中 如何在 JSON 字段上创建索引 我尝试使用 gt 运算符用于hstore但出现以下错误 CREATE TABLE publishers id INT info JSON CREATE I
  • 如何在 Javafx 中对齐对话框窗格的“确定”按钮?

    我想对齐 即位置中心 对话框窗格的 确定 按钮 我已经尝试过下面的代码 但它不起作用 Dialog dialog new Dialog DialogPane dialogPane dialog getDialogPane dialogPan
  • 在 REST WCF 中读取 HttpRequest 正文

    我在 net 4 中运行了一个 REST WCF 服务 并且我已经测试了它正在工作并接受我对其发出的 HttpRequest 的 Web 服务 但我在尝试访问 Web 服务中的 HttpRequest 主体时遇到了问题 我尝试使用 Fidd
  • UICollectionView - 水平滚动,水平布局?

    我有一个UIScrollView布置了一个图标网格 如果您能够想象 iOS Springboard 的布局 那么您的想法就非常接近正确了 它有一个水平的分页滚动条 就像 Springboard 一样 不过 布局似乎不太对劲 看起来好像是从上
  • 抑制 R 中的安装输出

    这真的开始让我烦恼 我尝试了几种方法 但似乎都不起作用 我正在从一个函数运行安装 该函数会生成许多我想抑制的不必要的消息 但我尝试执行此操作的所有方法都不起作用 我试图抑制的代码是 install github ROAUth duncant
  • 如何通过按 ESC 键关闭窗口(NSWindowController)?

    Issue 我希望用户能够通过按 ESC 键来关闭窗口 但在这种特定情况下我无法让它工作 按 ESC 会触发错误声音 不 你不能这样做 macOS bloop 但什么也没发生 Context 我正在创建 NSWindowController
  • MVC 的设计是 RESTful 的吗

    MVC 必须是 RESTful 的吗 有没有办法制作一个SOAP服务使用MVC图案 输入请求实际上会进入View首先然后进入Controller那么Model eg Request gt View gt Controller gt Mode
  • 当我调用 CMake 时如何定义变量,以便 qtcreator 知道它已定义?

    我有一段根据 define 有条件激活的代码 如下所示 ifdef VARIABLE code function endif cmake 脚本有一个 选项 命令 可以像这样设置变量 option VARIABLE Want to use V
  • 使用 java.nio.Files 更改 Linux 下的文件所有者组

    我有一台 Linux 服务器 并且正在 Java 中为服务器上的多个网站运行图像调整大小作业 网站文件由不同的操作系统用户 组拥有 新创建的缩略图 预览由运行调整大小作业的用户拥有 现在我正在谷歌搜索如何在调整大小程序中更改新创建的预览 缩
  • 使用安全字符串并保持其安全[重复]

    这个问题在这里已经有答案了 所以 NET框架提供了安全字符串 http msdn microsoft com en us library system security securestring aspx用于以安全方式存储字符串的类 但要读
  • 如何提高非持久 CGI 进程中的 Moose 性能?

    Moose http search cpan org dist Moose 是一个很棒的对象框架 问题在于 连同它的依赖项一起 它是very大的 我们的分析表明 在我们的平台上 仅加载 Moose 就会在非持久性 CGI 应用程序脚本上产生