有人有使用 PHP 加速器(如MMCache或Zend Accelerator )的经验吗?我想知道使用其中任何一个是否使 PHP 可以与更快的网络技术相媲美。此外,使用这些是否有权衡?
10 回答
请注意,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 本身包含一个优化器。
MMCache 已被弃用。我推荐http://pecl.php.net/package/APC或http://xcache.lighttpd.net/,它们都可以为您提供可变存储(如 Memcache)。
两者都很有趣,并且将提供速度提升,因为它们将源代码编译为二进制表示,然后由 PHP 引擎执行。
任何使用 PHP 运行的大型网站(例如 Facebook)都在运行某种操作码缓存系统,例如 MMCache。
问题是它们不是很容易根据您的系统进行设置。
根据实际执行了多少 PHP 代码以及执行需要多长时间,它们可能是一个非常大的胜利。这当然不会受到伤害,但是您看到的收益将在很大程度上取决于您当前花费的时间。
顺便说一句,mmcache 现在已经被整合到一个不同的项目中,我忘记了名字,但谷歌会告诉你。
我在生产服务器上使用 APC,它开箱即用效果很好。编译它并将其添加到 PHP 中,没有太多的调整要做。我每隔一段时间检查一次只是为了查看统计信息,但由于我使用 MVC 很多所有主要文件(路由器、控制器等)很少在日常基础上更改,因此代码保持编译并非常有效地运行.
目前我们使用免费的apc,只是在我们的实时服务器上简单的即插即用。为我们的网站提供了巨大的性能提升,尤其是随着项目规模的增加。我还禁用了 apc.stat,因此它不会检查代码是否已更新,因此每当我们需要更新实时站点上的代码时,我们都会重新启动 apache。
我使用 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,但它可以进行调整,随着速度和响应速度的提高,一点点内存的成本是不言而喻的。
BlaM 的测试包括 WordPress 进行的所有数据库调用。当您进行更少的数据库调用时,您会看到操作码缓存的性能提升更加显着。
你检查过Phalanger吗?它将 PHP 编译为 .NET 代码。以下是一些基准,表明它可以显着提高性能。
我曾经使用过 Zend Accelerator(2004 年左右)。它确实在可以使用的代码上获得了一些显着的性能提升,但不幸的是,我使用的系统被设计为经常动态加载代码然后对其进行评估,当时 Zend Accelerator 无法做太多事情(而且我我猜还是不能)。
不利的一面是,我们确实看到了一些缓存问题(代码可能会发生变化,但编译后的版本会出于某种原因与更改同步)。我想这些问题现在可能已经解决了。
无论如何,我没有任何硬比较的数字,当然也没有在不同的环境中编写相同的系统进行比较,但是对于绝大多数系统,PHP 不会在性能方面扼杀你。