アメコミとか映画とか音楽とか猫とか単車とか自転車とか革とか銀とかジーンズとかブーツとか今日喰ったものとか。
ファイルを配列に取り込んで 1 行ごとにゴニョゴニョやる場合に、
foreach(file("foo.txt") as $ent) {
// ゴニョゴニョ。
}
ということをしてサーバーにアップして動かしたら処理時間がエラいかかってしまった。ちなみに処理するファイルの数は 800 個ぐらい。ローカル環境では気になるほどでは無かった。
これやっぱループで $ent を取得する度にファイルを読みに行ってしまってんだろうか。ちゃんと
$foo = file("foo.txt");
foreach($foo as $ent) {
// ゴニョゴニョ
}
てな具合に配列に取り込んでから foreach にブチ込みましょう、という自分メモ。
配列名を考えるのがちょっと面倒だったときに「これこのまま file を丸ごと foreach にブチ込んでも動くんじゃね?」とか言ってやってみたら動いてしまったので以後多用してたのだけど(んでこれまでの使用箇所ではそんなに大量のファイルを処理したりはしなかったので処理時間とか気になるほどじゃなかった)、全部直した方が良いなこれは。
あっれいろいろ試してみたけど再現性が無いな。最初のとき 10 数秒単位で処理時間に差が出たんだが。丁度サーバーが別件で忙しかったとかなんだろうか。あとはファイルがキャッシュされてたり云々とか。
良く判んね。
続く。