配列の最後の値を取得するコードの速度を比較
サーバの負荷が気になるので、お絵かき掲示板交流サイトのトップページのphpのコードを書き直しているところです…。
ディレクトリ内の画像から最新の画像を1枚表示したいだけなのに、ディレクトリ内に1000枚画像があったら配列の数が1000個…それをタイムスタンプで逆順でソートしてまた配列に格納…。
ファイル名の数字が同じ桁数で新しいほど数値が増えるのなら、globでディレクトリ内の画像を呼びした時点でソートがかかっているのでタイムスタンプを使った処理をしなくても…。
その処理を省略するだけで、少なくとも00.1秒は速くなるようですね。サーバの処理速度にもよりますが…。
ふと思ったのですが…。
ディレクトリに1000枚の画像が存在していたらglobで古い画像から順番に配列に格納されるので、最新の画像は1000番目になりますね…。
foreachで配列の数だけループするけれど何もしない。しかしループが終わったあとに残る$filenameは配列の最後の値…。(必ずそうなる訳では無いようですが…)
$filenameに1000枚の画像のファイル名が入るので処理速度は期待できない…。
そこで…
最新の画像が表示されるので結果は同じ。ループしていないのでforeachを使うより軽い…はずだったのですがcountが重いのか…。

の処理速度がほぼ同じ…。
むしろforeachでループして最後に残った値を取得する下側の書き方のほうが処理時間が短くて…。
が一番遅い…。
配列の最後の値を取得したいのならendという関数が…と思いましたがなぜかあまり速くない。

一番速かったのは…。一番遅いと思っていたforeachで配列を最後まで読み込んで最後に残った値…でした。
お絵かき掲示板はこちら。
ディレクトリ内の画像から最新の画像を1枚表示したいだけなのに、ディレクトリ内に1000枚画像があったら配列の数が1000個…それをタイムスタンプで逆順でソートしてまた配列に格納…。
ファイル名の数字が同じ桁数で新しいほど数値が増えるのなら、globでディレクトリ内の画像を呼びした時点でソートがかかっているのでタイムスタンプを使った処理をしなくても…。
その処理を省略するだけで、少なくとも00.1秒は速くなるようですね。サーバの処理速度にもよりますが…。
ふと思ったのですが…。
ディレクトリに1000枚の画像が存在していたらglobで古い画像から順番に配列に格納されるので、最新の画像は1000番目になりますね…。
foreach(glob('cgi/poti/src/{*.png,*.jpg}', GLOB_BRACE) as $filename) {
}
foreachで配列の数だけループするけれど何もしない。しかしループが終わったあとに残る$filenameは配列の最後の値…。(必ずそうなる訳では無いようですが…)
$filenameに1000枚の画像のファイル名が入るので処理速度は期待できない…。
そこで…
$filename=glob("cgi/poti/src/{*.jpg,*.png}", GLOB_BRACE);
$filename=$filename[count($filename)-1];
最新の画像が表示されるので結果は同じ。ループしていないのでforeachを使うより軽い…はずだったのですがcountが重いのか…。

$filename=glob("cgi/poti/src/{*.jpg,*.png}", GLOB_BRACE);と
$filename=array_slice($filename, -1)[0];
foreach(glob('cgi/poti/src/{*.png,*.jpg}', GLOB_BRACE) as $filename) {
}
の処理速度がほぼ同じ…。
むしろforeachでループして最後に残った値を取得する下側の書き方のほうが処理時間が短くて…。
$filename=$filename[count($filename)-1];
が一番遅い…。
$filename=glob("cgi/poti/src/{*.jpg,*.png}", GLOB_BRACE);
$filename=end($filename);
配列の最後の値を取得したいのならendという関数が…と思いましたがなぜかあまり速くない。

一番速かったのは…。一番遅いと思っていたforeachで配列を最後まで読み込んで最後に残った値…でした。
お絵かき掲示板はこちら。
posted by さとぴあ at 2019/05/30 15:49
| お絵かき掲示板の改造