9

我正在使用 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标志有一点好处。通过 memcache 加载 1,500 次在 6.44 秒(压缩)而不是 6.74 秒(不压缩)内完成。但是,两者都比 慢file_get_contents,后者在 5.71 秒内完成相同数量的加载。

4

3 回答 3

10

因为 file_get_contentsmmap是文件,所以你只会有几个文件系统调用,这最终会在文件系统缓存中。memcache 涉及对 memcached 的进程外调用(以及集群实现上的服务器外调用)。

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

于 2012-03-04T14:44:49.023 回答
3

file_get_contents 是检索文件的最简单方法。底层操作系统(尤其是linux)已经有了高效的缓存机制。您所做的任何其他事情都会产生开销并减慢速度。

如果您从远程位置加载这些文件,那么 Memcache 将是有意义的。

编辑: file_get_contents 不一定是最简单的方法。fopen/fget可能会更快——我不知道。但是与缓存层的复杂性相比,差异应该很小。

于 2012-03-04T14:43:57.073 回答
0

将 XML 文件存储在 memcache 中对我来说意义不大。

我宁愿存储解析的值,节省阅读和解析。

于 2012-03-04T15:29:27.583 回答