這篇文章主要給大家介紹了關於PHP7如何開啟Opcode打造強悍效能的相關資料,文中通過範例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面一起學習學習吧
前言
鳥哥在部落格中說,提高PHP 7效能的幾個tips,第一條就是開啟opcache:
記得啟用Zend Opcache, 因為PHP7即使不啟用Opcache速度也比PHP-5.6啟用了Opcache快, 所以之前測試時期就發生了有人一直沒有啟用Opcache的事情
那麼什麼是Opcache呢?
Opcache 的前生是 Optimizer+ ,它是PHP的官方公司 Zend 開發的一款閉源但可以免費使用的 PHP 最佳化加速組件。 Optimizer+ 將PHP代碼先行編譯產生的指令檔 Opcode 緩衝在共用記憶體中供以後反覆使用,從而避免了從磁碟讀取代碼再次編譯的時間消耗。同時,它還應用了一些代碼最佳化模式,使得代碼執行更快。從而加速PHP的執行。
PHP的正常執行流程如下
request請求(nginx,apache,cli等)-->Zend引擎讀取.php檔案-->掃描其詞典和運算式 -->解析檔案-->建立要執行的電腦代碼(稱為Opcode)-->最後執行Opcode--> response 返回
每一次請求PHP指令碼都會執行一遍以上步驟,如果PHP原始碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重建Opcode,結合在Web中無所不在的緩衝機制,我們可以把Opcode緩衝下來,以後直接存取緩衝的Opcode豈不是更快,啟用Opcode緩衝之後的流程圖如下所示:
Opcode cache 的目地是避免重複編譯,減少 CPU 和記憶體開銷。
下面介紹Opcache的安裝
安裝:
1、找到opcache的擴充,我的是php7.1
yum list php71*
2、安裝擴充
yum install php71w-opcache.x86_64
配置:
zend_extension=opcache.so[opcache];開啟opcacheopcache.enable=1 ;CLI環境下,PHP啟用OPcacheopcache.enable_cli=1;OPcache共用記憶體儲存大小,單位MBopcache.memory_consumption=128 ;PHP使用了一種叫做字串駐留(string interning)的技術來改善效能。例如,如果你在代碼中使用了1000次字串“foobar”,在PHP內部只會在第一使用這個字串的時候分配一個不可變的記憶體地區來儲存這個字串,其他的999次使用都會直接指向這個記憶體地區。這個選項則會把這個特性提升一個層次——預設情況下這個不可變的記憶體地區只會存在於單個php-fpm的進程中,如果設定了這個選項,那麼它將會在所有的php-fpm進程中共用。在比較大的應用中,這可以非常有效地節約記憶體,提高應用的效能。這個選項的值是以MB(megabytes)作為單位,如果把它設定為16,則表示16MB,預設是4MBopcache.interned_strings_buffer=8;這個選項用於控制記憶體中最多可以緩衝多少個PHP檔案。這個選項必須得設定得足夠大,大於你的項目中的所有PHP檔案的總和。設定值取值範圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之後是 1000000。也就是說在200到1000000之間。opcache.max_accelerated_files=4000;設定緩衝的到期時間(單位是秒),為0的話每次都要檢查opcache.revalidate_freq=60;從字面上理解就是“允許更快速關閉”。它的作用是在單個請求結束時提供一種更快速的機制來調用代碼中的析構器,從而加快PHP的響應速度和PHP進程資源的回收速度,這樣應用程式可以更快速地響應下一個請求。把它設定為1就可以使用這個機制了。opcache.fast_shutdown=1;如果啟用(設定為1),OPcache會在opcache.revalidate_freq設定的秒數去檢測檔案的時間戳記(timestamp)檢查指令碼是否更新。如果這個選項被禁用(設定為0),opcache.revalidate_freq會被忽略,PHP檔案永遠不會被檢查。這意味著如果你修改了你的代碼,然後你把它更新到伺服器上,再在瀏覽器上請求更新的代碼對應的功能,你會看不到更新的效果強烈建議你在生產環境中設定為0,更新代碼後,再平滑重啟PHP和web伺服器。opcache.validate_timestamps=0;開啟Opcache File Cache(實驗性), 通過開啟這個, 我們可以讓Opcache把opcode緩衝緩衝到外部檔案中, 對於一些指令碼, 會有很明顯的效能提升.這樣PHP就會在/tmp目錄下Cache一些Opcode的二進位匯出檔案, 可以跨PHP生命週期存在.opcache.file_cache=/tmp
查看phpinfo:
測試結果:
同樣的介面從以前的幾百毫秒提升到現在的50ms左右