aki
akid****@s17*****
2005年 5月 23日 (月) 02:39:58 JST
古い話ですが、あらためてちょっと気になったので、 subjectのソート処理についてベンチしてみましたー。 Debian PHP 4.3.11 eAccelerator v0.9.3 です。 subject.php におけるsort処理部分だけ見ると、 0.0077 usort 0.0016 array_multisort でした。 全体的には、やはり誤差の範囲で、 有意の差はほとんどない感じでした。 で、メモリの方は全体で、 696632 usort 767880 array_multisort となって、1割ほどの違いがありました。 やっぱり今のまま、usortがいいようですね。 -- aki ----------------------- Original Message ----------------------- From: rsk <moons****@s32*****> To: p2-ph****@lists***** Date: Sat, 30 Apr 2005 17:36:37 +0900 Subject: [P2-php-dev 19] Re: PHPでファイル書き込みのベンチマーク > 自己レス。 > まず元の趣旨を読み違えていたことをお詫びします。 > > ソートの高速化ですが自分でやってみました。 > Pen3-866MHzのFreeBSD鯖、PHP 4.3.11、Apache 1.3.33 です。 > それぞれ1回ずつしかテストしてませんが > > ニュー速+: usort array_multisort > 新着: 0.0107100009918 0.000802993774414 > レス: 0.0109939575195 0.00127506256104 > no.: 0.00550389289856 0.000441789627075 > タイトル: 0.0103631019592 0.000828981399536 > 勢い: 0.0112819671631 0.000860929489136 > Birthday: 0.0108380317688 0.00204801559448 > > 約100倍の高速化! > 自分でもびっくり。 > p2 1.5.19 へのパッチも添付します。 > > ただソートよりもgetThreadInfoFromSubjectTxtLine()やsb_print()の > 占める割合が高すぎて全体としては誤差の範囲でした。 > メモリを多く使うようになるのでソートは今のままでも十分かも。 > > 対策として > ・P2Util::recKeyIdx()で全てのidxを一つにまとめたキャッシュを作成し、 > subject.phpではこれを読む > というのを考えてみたけど、確実に処理がややこしくなるし > 別方向で負荷が高くなりそうな予感がしますね。 > > 難しいなあ。 > > // +------------------------------+ > // | rsk <moons****@s32*****> | > // +------------------------------+ > > On 2005/04/30, at 15:24, rsk wrote: > > > ソートなんですが、イメージキャッシュ(1)の画像リストのソートでも > > 悩んだことがあります。 > > そのときの経験として、usort()するよりは > > オリジナルの配列ともう一つ比較用の配列を作って、 > > array_multisort($cmp_arr, $orig_arr); > > したほうがかなり速かったです。 > > (たぶん、組み込み関数だから) > > > > usort($aThreadList->threads, 'cmp_midoku'); > > なら > > 各 $aThread の $new, $unum, $torder をそれぞれ一次元の配列に押し込んどいて > > array_multisort($cmp_new, SORT_DESC, $cmp_unum, SORT_DESC, > > $cmp_torder, SORT_ASC, $aThreadList->threads); > > とすると高速化するかもしれません。 > > > > $cmp_xxxは $aThreadList のプロパティとして > > ThreadList::addThread() で登録するのが楽じゃないかと思います。 > > ソートは array_multisort($aThreadList->cmp_new, ... みたいな感じで。 > > > > > > ImageCache2の改良に注力してるので自分ではできませんが、 > > 時間があったらベンチ取ってもらえると嬉しいです。 > > # 上記コードも動作テストしてませんのであしからず。 >