[文章做者:磨延城 轉載請註明原文出處: 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