3

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

我想知道: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。

4

3 回答 3

2

所有数组在存储在缓存中时都需要进行序列化,然后在从缓存中加载它们时再次取消序列,这会花费时间,并且可能是您遇到的速度损失的重要因素。(供您参考:序列化)

加快序列化速度的一种方法是使用igbinaryapc.serializer=igbinary ,通过将php.ini 或通过 APC 的 ini 文件放入,igbinary 可以与 APC 无缝使用。(注意:这需要 APC >= 3.1.7)

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

于 2012-07-03T01:05:10.903 回答
1

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

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

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

于 2012-07-03T01:37:15.707 回答
0

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

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

于 2012-07-05T21:13:14.037 回答