はいのはいのはーい、小堤です。
ファイルの存在確認を行う場合、file_exists()を使うと思います。
ええ、それでいいんです。
だけど、こいつは0.005秒もコストがかかります。
存在確認だけに0.005秒もかかって、複数ファイルがあったら倍々ですよ!
ってことで、ファイルを読み込みたい!クラスファイルなどを読み込みたい!それと同時に
存在確認したい!とき限定ですが、下記の方法をxFrameworkでは実装しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$nER = error_reporting(); error_reporting( E_ALL & ~E_WARNING ); if( !( include $strPath ) ) { throw new Exception( $strPath . 'の読み込みに失敗しました。' ); } error_reporting( $nER ); |
って感じです。
includeで失敗した場合、ワーニングが表示されます。これを事前に無効にしておいて、レッツ読み込み!
そして、終わったらエラーレポーティングを元に戻してやります。
includeは読み込みに失敗した場合、false(Boolean)を返すのでそこをif文で判定してExceptionなりを発生させるとですね、なんと0.0028位のコストになるんですよ!!!
要するに44%も高速化できるわけです!!!
ただし、ファイルを読み込みたい!と思っていないものに対しては通用しません。
includeなので ソースとして読み込まれてしまいますし、大きなファイルだと逆にコストがかかりそうです。
ってことで、メモでした。
xFrameworkPX2.5の現在(60%くらい実装)のブートストラップの動きは0.0028910636901855秒と
好タイムをだしてまぁ~す(・~・)b
高速なファイル存在確認
Pingback: ファイル存在チェックを高速化