什么是 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 缓存。