1

我一直在用 PHP 进行一些测试,我注意到include在多个文件上执行与包含所有函数的文件相比要慢得多。

我的测试涉及创建 1025 个文件,其中 1024 个包含文本<?php class cls$i {} ?>(其中 $i 是文件号),以及 1 个文件是之前文件中所有文本的串联。然后我有两个功能,一个用于测试每个案例。加载单个文件的测试大约6ms需要编译为字节码并使内容可供系统使用,然而,1024 个文件的组合几乎花费了600ms.

就大小而言,1024 个单独的文件与单个文件的大小完全相同。我也在运行APC缓存字节码,但实际上,它只减少了几毫秒。

我还创建了一个 ramdisk 来保存所有文件,但这只是稍微快一点(平均 10 毫秒)。

那么,话虽如此,为什么单个文件比单个文件慢得多?是由于 PHP 中的加载引擎效率显着低下,还是我在配置(在我的本地系统上,标准 AMPPS 安装)中做了相当大的错误?

4

1 回答 1

3

我的第一个猜测是所有stat系统调用都在进行。

如果您apc.stat在配置中关闭会发生什么?

尽管 APC 缓存了字节码,apc.stat=1但它需要通过文件系统检查每个文件的 mtime 以确保不需要重新读取它。

编辑:更深入,以回应您的评论。您如何引用包含的文件?如果您使用的是相对路径,那么您将涉及到 include_path。

换句话说:

include "somefile.php";

可能会慢于

include __DIR__ . '/otherfile.php';
于 2013-07-18T00:24:26.847 回答