[英]Cost of file modification time checks
對於 Linux 下包含幾個字節的文件,我只需要處理自上次處理以來更改的時間。 我通過調用 PHP clearstatcache(); filemtime();
clearstatcache(); filemtime();
定期。 由於整個文件總是很小,刪除對 filemtime 的調用並通過將內容與過去的內容進行比較來檢查文件更改是否會提高性能? 或者,就性能而言,最好的方法是什么。
使用filemtime + clearstatcache
增強@Ben_D 的測試:
<?php
$file = 'small_file.html';
$loops = 1000000;
// filesize (fast)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_size = filesize($file);
}
$end_time = microtime(1);
$time_for_file_size = $end_time - $start_time;
// filemtime (fastest)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_mtime = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime = $end_time - $start_time;
// filemtime + no cache (fast and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
clearstatcache();
$file_mtime_nc = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime_nc = $end_time - $start_time;
// file_get_contents (slow and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_contents = file_get_contents($file);
}
$end_time = microtime(1);
$time_for_file_get_contents = $end_time - $start_time;
// output
echo "
<p>Working on file '$file'</p>
<p>Size: $file_size B</p>
<p>last modified timestamp: $file_mtime</p>
<p>file contents: $file_contents</p>
<h1>Profile</h1>
<p>filesize: $time_for_file_size</p>
<p>filemtime: $time_for_filemtime</p>
<p>filemtime + no cache: $time_for_filemtime_nc</p>
<p>file_get_contents: $time_for_file_get_contents</p>";
/* End of file */
我知道我參加聚會遲到了,但一點標桿從不影響討論。 Brian Roach 的直覺證明了聲音,甚至在您考慮比較步驟之前:
$file = "small_file.html";
$file_size = filesize($file);
//get the filemtime 1,000,000 times
$start_time = microtime(true);
for($i=0;$i<1000000;$i++){
$set_time = filemtime($file);
}
$end_time = microtime(true);
$time_for_filemtime = ($end_time-$start_time);
//get the time for file_get_contents 1,000,000 times
$start_time = microtime(true);
$file = "small_file.html";
for($i=0;$i<1000000;$i++){
$set_time = file_get_contents($file);
}
$end_time = microtime(true);
$time_for_file_get_contents = ($end_time-$start_time);
echo "<p>Working on a file that is $file_size B long</p>
<p>filemtime: $time_for_filemtime vs file_get_contents: $time_for_file_get_contents";
處理 41 B 長的文件
文件時間:0.36287999153137 vs file_get_contents:16.191468000412
沒有什么令人震驚的:“向文件系統詢問一些元數據”比“打開文件、讀入並比較內容”要快。
要統計文件,您只需向文件系統詢問一些元數據。
您的第二種方法涉及打開文件、讀入並比較內容。
你認為哪個會更快? ;)
我認為通知文件更改的最佳方法是inotify
,它正是為此目的而設計的。
請參閱inotify 擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.