为什么file_get_contents比memcache_get更快?

hal*_*fer 8 php file-io memcached php-internals

我正在使用file_get_contents从磁盘加载XML文件,作为测试,我发现我可以file_get_contents()在3.99秒内使用1,000次加载156K文件.我已经将用于加载的部分子类化并用memcache层替换它,并且在我的开发机器上找到我可以在4.54秒内完成1000个相同文档的加载.

我很欣赏file_get_contents()会做一些缓存,但看起来它实际上比一个众所周知的缓存技术更快.在单个服务器上,性能是否file_get_contents()可以达到?

我通过Macports,OS X 10.6.8使用PHP 5.2.17.

编辑:我发现这个大小的XML文档,使用MEMCACHE_COMPRESSED标志有一个小小的好处.通过内存缓存的1,500个负载在6.44秒内完成(压缩)而不是6.74(不带).然而两者都比慢file_get_contents,在5.71秒内负载相同.

Ter*_*ryE 8

因为file_get_contents mmap是文件,所以你只需要几个文件系统调用,这将最终在文件系统缓存中.内存缓存涉及对memcached的进程外调用(以及群集实现上的服务器外).

性能file_get_contents()至关重要取决于文件系统的类型,例如,NFS挂载的文件系统上的文件没有被映射,并且此访问速度可能会慢很多.同样在多用户服务器上,文件系统缓存可以被其他进程快速刷新,而memcached缓存几乎肯定会在内存中.