使用 MMCache 或 Zend Accelerator 等 PHP 加速器是否会使 PHP 更快?
Does anybody have experience working with PHP accelerators such as MMCache or Zend Accelerator? I'd like to know if using either of these makes PHP comparable to faster web-technologies. Also, are there trade offs for using these?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(10)
我以前使用过 Zend Accelerator(2004 年左右)。 它确实在它可以使用的代码上带来了一些显着的性能提升,但不幸的是,我使用的系统被设计为经常动态加载代码,然后评估它,Zend Accelerator 当时无法做太多事情(而且我'我猜还是不能)。
不利的一面是,我们确实看到了一些缓存问题(其中代码会发生更改,但编译版本由于某种原因与更改同步)。 我想这些问题现在可能已经解决了。
无论如何,我没有任何硬性的比较数字,当然也没有在不同的环境中编写相同的系统进行比较,但对于绝大多数系统来说,PHP 不会在性能方面杀死你。
我使用 APC,并且可以证明,如果您保持较高的缓存命中率,它可以显着降低应用服务器上的 CPU 和 I/O 负载。 它不仅可以让您免去编译的麻烦,还可以让您免于从磁盘读取 php 文件的麻烦。 (即字节码直接从主内存提供,因此速度非常快)它降低了渲染单个页面的速度,并增加了服务器每秒可以处理的请求数。
如果您使用 RedHat 或 CentOS,安装 APC 非常简单:
yum install php-devel httpd-devel php-pear
pecl install apc
echo "extension=apc.so" > /etc/php.d/apc.ini
# if you're using SELinux:
chcon "system_u:object_r:textrel_shlib_t" /usr/lib/php/modules/apc.so
/etc/init.d/httpd restart
您询问了缺点。 唯一的缺点是它需要一些内存。 APC 上的默认值是 30MB,但可以调整,随着速度和响应率的提高,一点点内存的成本会物有所值。
MMCache 已被弃用。 我推荐 http://pecl.php.net/package/APC 或 http://xcache.lighttpd.net/,两者都为您提供可变存储(如 Memcache)。
请注意,Zend Optimizer 和 MMCache(或类似的应用程序)是完全不同的东西。 当 Zend Optimizer 尝试优化程序操作码时,MMCache 会将脚本缓存在内存中并重用预编译的代码。
我前段时间做了一些基准测试,你可以找到 结果在我的博客中(尽管是德语)。 基本结果:
仅靠 Zend Optimizer 根本没有帮助。 实际上,我的脚本比没有优化器的脚本要慢。
当谈到缓存时:
* 最快:eAccelerator
* XCache
* APC
并且:您确实想要安装操作码缓存!
例如:
替代文本 http://blogs.interdose.com/ dominik/wp-content/uploads/2008/04/opcode_wordpress.png
这是调用 wordpress 主页 10.000 次所花费的持续时间。
编辑:顺便说一句,eAccelerator 本身包含一个优化器。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
目前我们使用免费的 apc,并且在我们的实时服务器上只是简单的即插即用。 为我们的网站提供了巨大的性能提升,尤其是随着项目规模的增加。 我还禁用了 apc.stat,因此它不会检查代码是否已更新,因此每当我们需要更新实时站点上的代码时,我们都会重新启动 apache。
currently we use apc, free and was just a simple plug and play on our live servers. Provided a huge performance increase for our site, especially as the project size increased. I also have the apc.stat disabled so it doesn't check if the code has been updated, so whenever we need to update the code on the live site we restart apache.