2011-09-04 93 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