簡介
字節碼緩存不是php的新特性,有很多獨立性的擴展可以實現緩存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等。但是到目前為止,這些獨立的擴展並沒有集成到php核心當中。所有在php5.5.0之后,php內置了字節碼緩存功能,叫做Zend Opcache。
zend Opcache前身是Zend Optimizer +,在03年改名Opcache,通過opcode緩存和優化提供更快的PHP執行過程。他會將預編譯后的php文件存儲在共享內存中以供以后的使用,避免從磁盤讀取文件在進行解釋的重復過程,減少時間和內存的消耗。在php5.5中及之后的版本中自帶了zend opcache模塊擴展,但是需要使用時需要我們開啟和配置。在php5.2- 5.4版本我們也可以使用Opcache,但是需要我們自行安裝。
什么是操作碼緩存
那么什么是字節碼緩存呢?php是一門解釋型的語言,php解釋器執行php腳本時會解析php腳本代碼,將php腳本代碼編譯成一系列可以直接運行的中間代碼,也稱為操作碼(Operate Code,opcode)。然后執行這些操作碼.
每次請求php文件都是這樣,所以會消耗很多資源,如果每次HTTP請求PHP都必須解析,編譯和運行腳本,消耗的資源將會更多.
Opcode cache 的目地是避免重復編譯,減少 CPU 和內存開銷。需要注意的是如果動態內容的性能瓶頸不在於 CPU 和內存,而在於 I/O 操作,比如數據庫查詢帶來的磁盤 I/O 開銷,那么 opcode cache 的性能提升是非常有限的.
現代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內存進行存儲,並且可以直接從中執行文件,而不用在執行前“反序列化”代碼。這將帶來顯着的性能加速,通常降低了整體服務器的內存消耗,而且很少有缺點.
安裝(php5.5.0以上跳過)
在PHP 5.5.0及之后版本中,PHP已經將Opcache功能以拓展形式內嵌在發布版本中了,默認未開啟Opcache加速,需要我們手動開啟。對於之前的老版本,可以將Opcache作為PECL拓展庫進行安裝和配置.
window下的安裝
1. 下載擴展:https://windows.php.net/downloads/pecl/releases/opcache/
2. 將php_opcache.dll放進php/ext目錄下
3. 修改php.ini下[php]配置(注意路徑要修改成你自己的):
linux下的安裝
源碼安裝
常用配置
我們可以這樣配置,啟用自動重新驗證緩存功能:
更多的配置指令可以看這里:http://php.net/manual/zh/opcache.configuration.php
常用函數
zend opcache使用很簡單,因為它啟動后會自動運行.zend opcache會自動在內存中緩存預先編譯好的php字節碼,如果緩存了某個文件的字節碼,就執行對應的字節碼.常見的關於zend opcache擴展的函數:
以上