ネットで色々見てると、インターネットは玉石混交と言わんばかりに、様々なコードが転がっていますね。
それで1つ気付いたコードを考察してみます。
まずはこれ。
$pager =& Pager::factory($pager_param); $navi = $pager -> getLinks(); print($navi["all"]); $currentPageID = $pager -> getCurrentPageID(); $index = ($currentPageID - 1) * $pagelimit + 1; for($i = 1; $i < $index + $pagelimit; $i++) { $row = $result->fetchRow(DB_FETCHMODE_ASSOC); if($i >= $index) { print $row['size']."," . $row['name'] . "</br>"; } }
このコードの範囲内だけ(こういうコードに至ったことの良し悪しは置いといて)で見たときに、少し改良できる点があります。
このコードは、for内のループの扱いで、このループはDBからデータを呼び出したとき、Pear::Pagerによって改ページを生成するためのものです。
しかし、これだと、改ページの番号が少ない間は高速ですが、番号が多くなるにつれて無駄にループが多くなり、呼び出しに時間がかかってしまいます。
$i=1から順番にまわし続けて、表示したい番号($index)ときのみ表示するため、$indexの数が増えれば増えるほどループが多くなり遅くなります。
これは、DBの行の数が少なければ問題ないですが、すごく多い場合はやっかいです。
そこで、どんな場合でもいける実装にforループを変えてみると、こうなります。
for($i = $index; $i < $index + $pagelimit; $i++) { $row = $result->fetchRow(DB_FETCHMODE_ASSOC,$i-1); print $row['size']."," . $row['name'] . "</br>"; }
これだと、どんな改ページのときでも、その時にあった番号からデータを読み込んで表示するので、無駄なループが必要なくなります。
体感でも、数万行を超えるDBを扱う場合は、かなり早くなっていました。
プログラムのコーディングをうまくなるためには、
インターネットでソースを見つけ、真似たをして、さらに自分なりに改良すること
が大事だと思います。