使用参数编译php有什么区别:
--with-[extension name]
而不是仅将其编译为共享模块并将其包含在内?有任何性能优势吗?如果没有,你为什么要这样做?
答案 0 :(得分:2)
也许这不是你问题的完整答案,但是到目前为止我能找到的是:“扩展和嵌入PHP strong>“,由Sara Golemon撰写(amazon;某些部分也可在Google图书上找到。)
相关部分(第56页上方的注释)是:
有没有想过为什么有些扩展 使用
--enable-extname
和 一些配置使用--with-extename
?功能上,两者之间没有区别。在 但是,实践是--enable
可以打开的功能 无需任何第三方 库。相比之下,--with
是 意味着有这样的功能 先决条件。
所以,没有关于性能的单词(我想,如果存在差异,只需要“加载一个文件”vs“加载一个更大的文件< / em>“);但这种可能性背后有技术上的原因。
我想这样做是因为PHP本身不会需要一个额外的外部库,因为有些扩展;使用正确的选项允许用户自己启用或禁用扩展,具体取决于他们是否已拥有该外部库。
答案 1 :(得分:2)
内存占用可能存在差异?
如果我错了,请纠正我,但在内存中加载的每个进程中都会复制内置模块(因为它是静态链接的),而共享模块只加载一次并由所有php进程共享。
答案 2 :(得分:1)
我注意到当加载所有函数作为共享模块时,php页面加载速度更快,cpu使用率更低,但是某些命令行php函数无法正常工作。合乎逻辑的假设共享模块设置比大型静态二进制文件更有效,因为模块只在需要时加载。
答案 3 :(得分:0)
任何表现利益都可以忽略不计。它只是打包PHP版本的另一种选择。
在我的Mac上,我使用Marc Liyange’s build of PHP,其中包括内置的PostgreSQL支持。它是使用--with-pdo-pgsql
标志构建的。因此,它不需要与pdo-pgsql共享库一起分发。
如果他没有使用--with-pdo-pgsql
构建,他将需要分发pdo-pgsql共享库并在php.ini
中包含一个指令来加载它。当然,这只是一个小小的差异,但是如果你知道你将要使用这个功能,可以将它构建到PHP本身。
答案 4 :(得分:0)
我认为Nate对于性能是正确的,而且这个选项只对包装有帮助。
基本上使用编译模块,PHP可以直接调用模块函数,但是在编译之后,这些调用被转换为要调用的内存地址。
在可加载模块版本中,PHP将调用dl_open来加载库,然后通过那些地址来调用函数,就像编译版本那样。我猜这个dl_open调用只在web服务器启动时完成一次,所以你可以忽略它。