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