首页 > PHP编程 > 新一代 PHP 加速插件 Zend Opcache

新一代 PHP 加速插件 Zend Opcache

2015年5月15日

新一代 PHP 加速插件 Zend Opcache

http://blog.csdn.net/pcyph/article/details/41485647

目前PHP的缓存插件一般有三个:APC、eAccelerator、XCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache(http://pecl.php.net/package/ZendOpcache ),功能和前三者相似但又有少许不同,缓存速度据说比它们更快.
主要原理: 就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。
Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上–enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:

wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ 表示安装完成,下面要修改php的配置文件让它生效
在 php.ini 的最后面加入下面几行

zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

128意思是给它分配128M内存,重新启动apache, 打印phpinfo();信息后, 即可找到Zend OPcache信息. 如图片


在phpinfo()信息中, 目前来看有两条信息犹为重要:

Cache hits     (高级缓存命中)
Cache misses  (高级缓存未命中)

在这两条信息中即可观察缓存运行情况, 一目了然
高速缓存带来哪些优化呢? 对代码运行有多大帮助?
我们做个测试, 验证一下什么是opcache.

<?php
  echo 'opcache';
?>

这是一段非常简单的php代码, 请保存为demo.php文件然后访问, 随意刷新, Cache hits数值会不停地增加, 说明起作用了,
然后你修改代码为:

<?php
   echo 'cache new';
?>

再刷新demo.php, 应该可以看到效果, 打印出来的值仍然是opcache, 即源码被缓存了, 它不再解析demo.php文件, 试着不停地刷新, 检测多少秒后才更新.
可设置:

opcache.force_restart_timeout=180

的时间来控制更新速度.
这就类似于web项目中的静态文件缓存一下, 比如我们加载一个网页, 浏览器会自动帮我们把jpg, css缓存起来, 唯独php没有缓存, 每次均需要open文件, 解析代码, 执行代码这一过程, 而opcache即可解决这个问题, 代码会被高速缓存起来, 提升访问速度.
如果嫌phpinfo()不直观可以装个PHP文件查看,地址 https://gist.github.com/JingwenTian/9508141,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到.
个人建议: 本地环境非必要情况下不要开启opcache, 服务器上可以开启, 必竟不是天天更新. 缓存起来有它的历史意义.

############################################################

Zend Opcache 这就类似于web项目中的静态文件缓存一下, 比如我们加载一个网页, 浏览器会自动帮我们把jpg, css缓存起来, 唯独php没有缓存, 每次均需要open文件, 解析代码, 执行代码这一过程, 而opcache即可解决这个问题, 代码会被高速缓存起来, 提升访问速度.

Zend Opcache PHP 5.5 特有的, 大家知道目前PHP的缓存插件一般有三个:APC、eAccelerator、XCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快

这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。

Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上–enable-opcache就行了,这样自动会有opcache.so

以下为 安装扩展实例:
但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:
依次执行下面的命令
wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
/usr/local/php/bin/phpize
如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize,下面这行也要按你的php.ini路径自行修改
./configure –with-php-config=/usr/local/php/bin/php-config
make
make install

打开php.ini 在最下面添加如下几行

zend_extension=opcache.so
opcache.memory_consumption=128 //共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8 //interned string的内存大小, 也可调
opcache.max_accelerated_files=4000 //最大缓存的文件数目
opcache.revalidate_freq=60 //60s检查一次文件更新
opcache.fast_shutdown=1 //打开快速关闭, 打开这个在PHP Request Shutdown的时候 会收内存的速度会提高
opcache.enable_cli=1

128意思是给它分配128M内存,然后重启apache,用phpinfo查看是否生效,显示下面的信息就说明生效了

with Zend OPcache v7.0.2, Copyright (c) 1999-2013, by Zend Technologies
或 Zend OPcache

我们做个测试, 验证一下什么是opcache.

echo ‘hellow opcache’;

这是一段非常简单的php代码, 请保存为a.php文件然后访问, 随意刷新, Cache hits数值会不停地增加, 说明起作用了,
然后你修改代码为:

echo ‘hellow opcache new’;

再刷新a.php, 应该可以看到效果, 打印出来的值仍然是hellow opcache, 即源码被缓存了, 它不再解析a.php文件, 试着不停地刷新, 检测多少秒后才会输出 hellow opcache new.

分类: PHP编程 标签:
本文的评论功能被关闭了.