file_exists() is_file() 速度比較
ファイルの存在確認をするときに使う関数 file_exists() 、 is_file() の速度を比較するため簡単なコードを書いてテスト。
テストしたコードが単純すぎてキャッシュを確認しているだけだとしても…。
速度差が10倍…なら is_file() で構わないところは is_file() を使ったほうが。
動作の違いは…。
POTI-boardで使用されている file_exists() の該当箇所をしらべてみると…。
ディレクトリの確認をしているかもしれない箇所はほとんどなく逆にディレクトリしかなくても bool(true) では意図した動作にならないところに file_exists() が使用されている事がわかりました。
POTI-boardは一言書いて投稿するだけでもすべてのログを解析してHTMLファイルに書き出します。
そのためログが肥大化すると処理速度が遅くなってしまうのですが…さらに投稿するたびにすべての画像ファイルにアニメファイルがあるかどうか確認しているのでそこに重い関数を使うと…。
投稿時にアニメファイルの存在確認を行う回数が一目でわかるようにdumpしてみました。

アニメファイルの存在確認を file_exists() から is_file() に書き換えたところ8秒かかっていた投稿処理時間が1秒に短縮。
運営している絵板は設置件数が多くログ保持件数が多いのに一番安いさくらのレンタルサーバ ライト
のライトプランなので、遅くても仕方がないのかな?と思っていたのですがどうにか…。
この変更は、POTI-board改 v1.52.9 lot.190812に反映されました。
(最新版は v1.53.2 lot.190831)
POTI-board改のダウンロードはこちらから。
お絵かき掲示板はこちら。
<?phpis_file() のほうが、10倍速いという結果がでました。
$time_start = microtime(true);//計測開始
$img='img/hoge.png';
for($i=0; $i<100000;++$i){//10万回繰り返す
file_exists($img);
}
$time = microtime(true) - $time_start; echo "{$time} 秒";
//計測結果
$time_start = microtime(true);//計測開始
$img='img/hoge.png';
for($i=0; $i<100000;++$i){
is_file($img);
}
$time = microtime(true) - $time_start; echo "{$time} 秒";
//計測結果
//0.37799286842346 秒 0.038822174072266 秒 さくらのレンタルサーバライト
テストしたコードが単純すぎてキャッシュを確認しているだけだとしても…。
速度差が10倍…なら is_file() で構わないところは is_file() を使ったほうが。
動作の違いは…。
$img='img/';
var_dump(is_file($img));//bool(false)
var_dump(file_exists($img));//bool(true)
$img='img/hoge.png';file_exists()は、ディレクトリしかなくても bool(true) を返します。 is_file() では bool(false) になります。
var_dump(is_file($img));//bool(true)
var_dump(file_exists($img));//bool(true)
POTI-boardで使用されている file_exists() の該当箇所をしらべてみると…。
ディレクトリの確認をしているかもしれない箇所はほとんどなく逆にディレクトリしかなくても bool(true) では意図した動作にならないところに file_exists() が使用されている事がわかりました。
POTI-boardは一言書いて投稿するだけでもすべてのログを解析してHTMLファイルに書き出します。
そのためログが肥大化すると処理速度が遅くなってしまうのですが…さらに投稿するたびにすべての画像ファイルにアニメファイルがあるかどうか確認しているのでそこに重い関数を使うと…。
投稿時にアニメファイルの存在確認を行う回数が一目でわかるようにdumpしてみました。

アニメファイルの存在確認を file_exists() から is_file() に書き換えたところ8秒かかっていた投稿処理時間が1秒に短縮。
運営している絵板は設置件数が多くログ保持件数が多いのに一番安いさくらのレンタルサーバ ライト

この変更は、POTI-board改 v1.52.9 lot.190812に反映されました。
(最新版は v1.53.2 lot.190831)
POTI-board改のダウンロードはこちらから。
お絵かき掲示板はこちら。
posted by さとぴあ at 2019/09/06 18:34
| お絵かき掲示板の改造
この記事へのコメント