更好的性能:多个包含或预处理数据


Better performance: Multiple includes or preprocess data?

最佳选择是什么?(频繁请求的性能permlink)

  • 对数据文件的多重访问(对文件系统的多次访问是一个问题?):
readfile("meta-data.html");
readfile("header.html");
readfile("ads.html");
readfile("body-tags.html"); 
readfile("ads2.html");
readfile("profile-target-userA.html"); 
...
  • 使用模板和str_replace预处理部分页面:
$file = file_get_contents("template.code"); 
$file = str_replace("<!-- meta-data -->", $new_meta_data, $file);
$file = str_replace("<!-- header-->", $new_header, $file);
... 
echo $file;

欢迎其他替代方法

假设您的操作系统有I/O缓存,第二种方法很可能会慢一些。在内存中移动字符串(这是str_replace将要做的)可能比访问磁盘要昂贵得多,特别是当文件当前由操作系统缓存时。

然而,你应该基于你的模板/视图系统的可维护性和灵活性,而不仅仅是性能。最好在性能方面做出一点牺牲,以生成更易于维护的模板。

通常,我看到模板写成PHP文件——一个人会设置几个变量,然后include()模板。然后PHP将执行它们,这使您在编写视图时具有相当大的灵活性。并且,如果模板文件真的只是HTML, include()将具有与readfile()相同的效果。

根据定义,访问一个文件比访问多个文件要快,只要它们在同一个驱动器上(但否则就不公平了,例如,当一个文件在硬盘上而其他文件在SSD上)。必须查找文件的物理位置,驱动器必须"搜索"它,这将花费更多的时间为您包含的每个文件。

但是你说的是微秒,所以我闻到了过早的优化。