您的位置:首页 > 编程语言 > PHP开发

新一代 PHP 加速插件 Zend Opcache

2014-11-25 17:53 211 查看
原文  http://jingwentian.com/t-173

目前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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: