2011-09-04 27 views
1

什么是最好的选择? (频繁请求的性能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; 

欢迎其他替代方法。

+0

file()返回一个数组,使用file_get_contents()将字符串的内容作为字符串返回。 – str

+0

我已经改变了,谢谢! – Manz

回答

1

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

但是,您应该基于您的模板/视图系统的可维护性和灵活性,而不仅仅是性能。牺牲一点性能来生产更多可维护的模板会更好。

通常情况下,我将模板写成PHP文件 - 其中一个会设置一些变量,然后设置模板。然后PHP将执行它们,这为编码视图提供了相当大的灵活性。而且,如果模板文件真的只是HTML,include()将与readfile()具有相同的效果。

0

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

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

+1

不要忘记I/O缓存。如果这些文件被频繁读取,他们将大部分时间都花在OS I/O缓存上,并且可以返回到应用程序,而无需打开磁盘。 – cdhowie

+0

的确如此,但我认为他也想替换顺序读取文件中的东西。 – CodeCaster

相关问题