Mat*_*tic 19 php optimization performance apc command-line-interface
在CLI模式下运行时,PHP中的APC模块是否支持代码优化?例如,当我运行文件php -f <file>时,文件是否会在执行之前用APC进行优化?假定APC设置为在配置文件中加载.此外,包含的脚本require_once是否也会进行优化?
我知道在fastcgi模式下运行时优化工作正常,但我想知道它是否也适用于CLI.
apc_*函数工作,但我想知道代码优化,这是我在这里的主要事情.
快乐的一天,马蒂奇
Pas*_*TIN 28
apc.enable_cli控制是否应在CLI模式下激活APC 的文档说(引用):
主要用于测试和调试.设置此选项可启用APC for CLI的PHP版本.在正常情况下,在每个CLI请求上创建,填充和销毁APC缓存并不理想,但是对于各种测试场景,能够轻松地为PHP的CLI版本启用APC非常有用.
也许APC会将操作码存储在内存中,但随着PHP可执行文件在脚本末尾消失,该内存将丢失:它将不会在脚本执行之间持续存在.
所以APC中的操作码缓存在CLI模式下是无用的:它不会优化任何东西,因为PHP每次启动PHP的可执行文件时仍然必须重新编译源代码到操作码.
实际上,APC没有"优化":执行PHP脚本的标准方法是这样的:
APC所做的是存储在内存中的操作码中,因此PHP脚本的执行变为:
但这意味着你必须在内存中有一些位置来存储操作码.当PHP作为Apache模块运行时,Apache负责该内存段的持久性......当从CLI运行PHP时,没有什么可以保留内存段,所以它在PHP执行结束时被销毁.
(我不知道它是如何工作的,但它就是这样的,至少在原则上,即使我的话不是很"技术性"^^)
或者,通过"优化",你的意思是操作码缓存,比如配置指令apc.optimization?如果是这样,这个已在APC 3.0.13中删除
如果您有根据环境生成任何配置的 CLI 代码,那么 CLI 代码会认为 APC 未启用。例如,当通过 CLI 生成 Symfony 的 DI 容器时,它会告诉 Doctrine 不要使用 APC(详细信息)。
此外,我还没有测试过它,但 APC 可能会提高pcntl_fork(). 编辑:我已经问过关于APC & pcntl_fork()here的问题。
为了完整起见,要在 CLI 上启用 APC(在 Ubuntu 中):
echo 'apc.enable_cli = 1' > /etc/php5/cli/conf.d/enable-apc-cli.ini
Run Code Online (Sandbox Code Playgroud)