为什么包含多个文件比捆绑到一个文件要慢得多

时间:2013-07-18 00:22:05

标签: php performance include

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

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

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

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

所以,话虽如此,为什么单个文件SOOOOO比单个文件慢得多?是否归结为PHP中加载引擎的显着低效率,或者我在配置中做了相当大的功能(在我的本地系统上,标准的AMPPS安装)?

1 个答案:

答案 0 :(得分:3)

我的第一个猜测是,所有stat系统调用都在继续。

如果您在配置中关闭apc.stat会怎样?

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

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

换句话说:

include "somefile.php";

可能比

include __DIR__ . '/otherfile.php';