PHP APC - 为什么加载缓存的数组操作代码会变慢?

时间:2012-07-03 00:26:19

标签: php apc opcode-cache

我正在使用APC来减少PHP文件的加载时间。我的文件加载速度非常快,除了我定义超过100个数组的一个文件。这个270 kb的文件需要200 ms才能加载。其余文件中充满了对象,方法和函数。

我想知道:OP代码缓存不能用于数组吗?

我的APC缓存应该足够大,可以处理我的所有课程。目前我的缓存中有40%是免费的。我的命中率是99%。

apc.shm_size=32 M
apc.max_file_size = 1M
apc.shm_segments= 1

APC 3.1.6

我正在使用PHP 5.2,Apache 2和Windows Vista。

3 个答案:

答案 0 :(得分:2)

存储在缓存中时,所有数组都需要serialized,然后当您从缓存中加载unserialised时,这需要时间,这可能是您遇到的速度损失的重要因素。 (供您参考:Serialisation)

speed up serialisation的一种方法是使用igbinary,通过将apc.serializer=igbinary放在php.ini中或者放在通过APC的ini文件中,可以将igbinary无缝地与APC一起使用。 (注意:这需要APC> = 3.1.7)

您也可以将apc.stat(在同一个ini文件中)设置为0,这样它只会检查一次修改文件,而不是每次都检查。

答案 1 :(得分:1)

操作码缓存的一个方面是,除非你正确配置它,否则它将继续统计每个文件以查找更改。如果您需要解析许多文件并将其转换为操作码,这可能会导致大量开销。

通过设置apc.stat = 0,您通常可以大幅提升效果。但是,请注意,为了更改代码,您需要调用apc_clear_cache()或重新启动apache。

http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat

答案 2 :(得分:0)

问题是使用gettext库来翻译所有内容。当我摆脱大约1000个函数调用时,加载时间从200毫秒减少到6毫秒。

我的猜测是数据的序列化也是一个问题,但它是次要的。