[文章做者:磨延城 转载请注明原文出处: https://mo2g.com/view/137/ ]php
可能不少朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,因此它不须要通过编译就能运行,诸如此类. 这种说法虽然并不彻底正确,但对于初学者来讲,这么理解或许还比较合适,不只能快速入门,调试代码还挺方便.但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes.html
可能不少朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,因此它不须要通过编译就能运行,诸如此类。缓存
这种说法虽然并不彻底正确,但对于初学者来讲,这么理解或许还比较合适,不只能快速入门,调试代码还挺方便。但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes。bash
默认状况,PHP对每个请求,都会进行代码解析、编译等一系列处理生成对应的操做码,最后经过Zend引擎执行。如图所示:并发
引用Laruence的例子:函数
1
2
3
4
5
|
<?php
echo
"Hello World"
;
$a
= 1 + 1;
echo
$a
;
?>
|
PHP执行这段代码会通过以下4个步骤(确切的来讲,应该是PHP的语言引擎Zend)
1.Scanning(Lexing) ,将PHP代码转换为语言片断(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opocdes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。php-fpm
Opcodes缓存的做用正是把编译好的操做码保存一段时间,让Zend引擎在以后的请求中不用再次解析、编译。如图所示:工具
当你在苦苦寻求加快PHP网站响应速度的方法时,我敢说缓存Opcodes就是你要找的方法之一,并且是最容易的。性能
本文介绍如何使用Opcache(原名Zend Optimizer Plus,简称O+)给PHP程序加速。O+是由Zend公司开发的一个PHP性能提高工具,不一样于其余Opcodes缓存工具, O+除了缓存Opcodes之外, 还作了不少的Opcodes优化。测试
从PHP5.5开始, O+已经随着PHP的源代码一块儿发布了。5.2以上的PHP版本也能够经过编译的方式,加载O+。下载地址http://pecl.php.net/zendopcache
相同配置下,使用Apache Benchmark进行压力测试,O+的优化效果对好比下:
ab -c50 -t2 10.0.0.59/ab_test.php
开启O+:Requests per second: 168.77 [#/sec] (mean)
关闭O+:Requests per second: 157.44 [#/sec] (mean)
提升了11.33
ab_test.php代码以下:
1
2
3
4
5
6
7
8
9
|
<?php
$x
= 10000;
$arr
=
array
();
while
(
$x
) {
$arr
[
$x
] =
$x
--;
}
foreach
(
$arr
as
$row
) {
echo
"$row<br>"
;
}
|
接下来就把个人安装流程贴出来,由于我是用yum搭建环境的,可能不适用于你的状况,仅供参考。
1)下载、编译、安装
1
2
3
4
5
6
7
|
wget http:
//pecl
.php.net
/get/zendopcache-7
.0.3.tgz
tar
zxvf zendopcache-7.0.3.tgz
cd
zendopcache-7.0.3/
phpize
.
/configure
make
make
install
|
2)编辑php.ini,在文件底部添加配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
vi
/etc/php
.ini
zend_extension=
/usr/lib64/php/modules/opcache
.so
;命令行模式是否开启缓存功能,我建议不开启
opcache.enable_cli=0
;共享内存大小, 这个根据大家的需求可调
opcache.memory_consumption=128
;interned string的内存大小, 也可调
opcache.interned_strings_buffer=8
;最大缓存的文件数目
opcache.max_accelerated_files=4000
;60s检查一次文件更新
opcache.revalidate_freq=60
;打开快速关闭, 打开这个在PHP Request Shutdown的时候,回收内存的速度会提升
opcache.fast_shutdown=1
;不保存文件/函数的注释
opcache.save_comments=0
|
3)让php-fpm从新加载配置文件
1
|
/ect/init
.d
/php-fpm
reload
|
4)运行以下代码
1
2
|
<?php
phpinfo();
|
若是能找到相似的文字提示,说明PHP已经成功加载了OPcache。立刻体验一下,PHP网站是否是响应更快了呢?
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies