什麼是 opcode?

通常情況 PHP 的程式執行 Zend 虛擬之上的,當然也可以選擇 FB 出的 HHVM 。 PHP 的 opcode 就是 Zend 虛擬機器執行的指令。我們的 PHP 程式碼在需要先透過 Zend 編譯器編譯為 opcode,再透過 Zend 解析器執行 opcode 指令。

opcode 快取目的

透過將 PHP 指令碼預編譯的位元組碼儲存到共享記憶體中來提升 PHP 的效能,儲存預編譯位元組碼的好處就是省去了每次載入和解析 PHP 指令碼的開銷。

Zend Optimizer v3.x.x v2.x.x

在 PHP-5.2.x 以前的 PHP 版本使用,用最佳化程式碼的方法來提高 PHP 應用程式的執行速度,理論上要比不使用 ZO 要快 40%-100% 。實現的原理是對 那些在被最終執行之前由執行編譯器 (Run-Time Compiler) 產生的程式碼進行最佳化。 (來自百科) 而且在 PHP-5.2.x 之前只有透過官方 Zend Optimizer 才能執行經 Zend Guard 加密和混淆的 PHP 程式碼。

Zend Guard Loader

PHP-5.3.x 之後的 PHP 版本使用,加強對 PHP 商用程式碼的保護,並提高 PHP 的執行效能,其前身就是 Zend Optimizer 。

OPcache

能夠在共享記憶體中儲存預編譯的 PHP 指令碼,以提高 PHP 的執行效能,從而使得不用每次請求都要載入與解析 PHP 指令碼。 PHP-5.5 以後,已捆綁和 PHP 一起釋出。

APC

Alternative PHP Cache (APC) 是一個開放自由的 PHP opcode 快取。它的目標是提供一個自由、 開放,和健全的框架用於快取和最佳化 PHP 的中間程式碼。可以做 PHP 檔案的 opcode 快取,也可以做使用者資料快取 (小量的) 。

eAccelerator

eAccelerator 是一個免費開源的 PHP 加速、最佳化、編譯和動態快取的專案,它可以透過快取 PHP 程式碼編譯後的結果來提高 PHP 指令碼的效能,eAccelerator 透過把經過編譯後的 PHP 程式碼快取到共享記憶體中,並在使用者訪問的時候直接呼叫從而起到高效的加速作用,雖然是一個好專案,但是已經幾年沒有更新了,最新版 本支援 php-5.4,當然是官方說的。

Xcache

XCache 是一個又快又穩定的 PHP opcode 快取器. 經過良好的測試並在大流量/高負載的生產機器上穩定執行. 經過 (在 linux 上) 測試並支援所有現行 PHP 分支的最新發布版本, 如 PHP_5_1 PHP_5_2 PHP_5_3 PHP_5_4. 並完美支援執行緒安全/Windows. 與同類 opcode 快取器相比更勝一籌, 比如能夠快速跟進 PHP 版本.

PHP 程式碼的加密與 OPcode 快取

將 PHP 程式碼直接編譯為 opcode 程式碼, 其實也是一種加密 PHP 程式碼的機制了,因為只需要再進一步將 opcode 程式碼簡單的序列化或者混淆,然後在 Zend 虛擬機器執行之後,反解為 opcode 代 碼即可。但是加密的目的是為了避免原始碼被分析的可能;而 opcode 是為了提高程式的執行速度。

總結:

如果要選擇 OPcode 那就直接用 PHP 官方推薦的 OPcache 吧,如果你的是商業 PHP 程式碼,在 PHP-5.2.x 之前選擇是 Zend Optimizer,但是 PHP-5.3+的版本就需要使用 Zend Guard Loader 了。值得注意的是 PHP 加密並最佳化之後,還可以選擇一種 Opcode 快取。