我正在使用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。
答案 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毫秒。
我的猜测是数据的序列化也是一个问题,但它是次要的。