# 什么是 opcode 缓存

**URL:** <https://www.isharkfly.com/t/opcode/2849>\
**Category:** PHP\
**Created:** [December 30, 2013, 5:57am UTC](https://www.isharkfly.com/t/opcode/2849 "2013-12-30T05:57:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [December 30, 2013, 5:57am UTC](https://www.isharkfly.com/t/opcode/2849/1 "2013-12-30T05:57:44Z")

</div>

当解释器完成对脚本代码的分析后，便将它们生成可以直接运行的中间代码，也称为操作码（Operate Code，opcode）。Opcode cache 的目地是避免重复编译，减少 CPU 和内存开销。

如果动态内容的性能瓶颈不在于 CPU 和内存，而在于 I/O 操作，比如数据库查询带来的磁盘 I/O 开销，那么 opcode cache 的性能提升是非常有限的。

但是既然 opcode cache 能带来 CPU 和内存开销的降低，这总归是好事 —— 本着环保的态度，也应该尽量减少消耗不是？ 😃

现代操作码缓存器（Optimizer+，APC2.0+，其他）使用共享内存进行存储，并且可以直接从中执行文件，而不用在执行前“反序列化”代码。这将带来显着的性能加速，通常降低了整体服务器的内存消耗，而且很少有缺点。
