超強引www<?php $mynum = "2005-05"; $num = $_REQUEST{'page'}; ?> <?php include("top_bar.html"); ?> <div id="nikki-block"> <?php $max = 2; if ($num == 0) { for ($i = 1; $i <= $max; $i++) { include("${mynum}_$i.php"); } } else if ($num < 1) { $num = 1; } else if ($num > $max) { $num = $max; } if ($num > 0) { include("${mynum}_$num.php"); } ?> <?php for ($i = 1; $i <= $max; $i++) { if ($i == $num) { print "$i | "; } else { print "<a href=\"?page=$i\">$i</a> | "; } } if ($num == 0) { print "ALL"; } else { print "<a href=\"${mynum}.php?page=0\">ALL</a>"; } print "<br>\n"; ?> <?php include("bottom_bar.html"); ?>
Redirect permanent で静的 HTML ファイルに飛ばすという手法を使おうと少し実験。
Redirect permanent /nikki/sakura.cgi?num=1 http://griffonworks.net/nikki/archive/1.phpと書いて実際に num=1 にアクセスしてみた。
num=* もしくは date=* かつ、mode=null であれば Redirect permanent するという perl スクリプトを挿入、HTML ヘッダで 302 permanent でリダイレクトさせるようにした。
SELECT category_en,COUNT(category_en) FROM diary GROUP BY category_enという驚くべき(?)結果に。('A`;
→ 0.1633 sec.
SELECT category_en FROM diary GROUP BY category_en
→ 0.0780 sec.
SELECT category_en FROM diary
→ 0.0018 sec.
while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) {0.02 sec. だけ早くなったが、こうすることで今まで主カテゴリと副カテゴリの 2回クエリを実行していたのが 1回で済んだので、0.16 x2 sec. が 1/2 になったので無問題。
$CATEGORY_COUNT{$TMP_HASH->{category_en}}{$TMP_HASH->{subcategory_en}}++;
}
→ 0.14367 sec.
SELECT category_en,subcategory_en,COUNT(category_en) FROM diary GROUP BY category_en,subcategory_enとなりキャッシュ効きまくり。
→ 0.00063 sec.
#!/usr/local/bin/perl5.8.6ただ単に $TMP_HASH->{'COUNT(category_en)'} とすればいいだけだったなんて・・・。
use DBI;
my $query_strings = "SELECT category_en,COUNT(category_en) FROM diary GROUP BY category_en";
$mysql_db = DBI->connect("DBI:mysql:DBNAME:localhost", USERNAME, PASSWORD);
$mysql_sth = $mysql_db->prepare("$query_strings");
my $ret = $mysql_sth->execute;
my @MAIN_CAT_DATA;
while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) {
printf("%-15s %5d\n", $TMP_HASH->{'category_en'}, $TMP_HASH->{'COUNT(category_en)'});
push(@MAIN_CAT_DATA, "$TMP_HASH->{'category_en'}:$TMP_HASH->{'COUNT(category_en)'}");
}
$mysql_sth->finish;
$mysql_db->disconnect;
0.167482 sec."SELECT * FROM diary" より遅くなるのは GROUP BY と COUNT で集計してるからか・・・。_| ̄|○
SELECT category_en,subcategory_en,COUNT(category_en)
FROM diary GROUP BY category_en,subcategory_en
0.164456 sec.
SELECT category_en,COUNT(category_en)
FROM diary GROUP BY category_en
0.145685 sec.
SELECT * FROM diary
表示速度は 1.5sec まで短縮できたが、プラグインを使っている限りこの壁は越えられそうにない。
- 月別表示した時、一番最後の日の記事が前日の記事と一緒になってしまうバグを修正。
- 月別表示した時、表示している月のカレンダーを表示するよう修正。
今までは「現在の月」を表示していた。
% /usr/bin/time ./sakura.cgi > /dev/null・・・・・・。
2.26 real 0.80 user 0.28 sys
~/public_html/nikki> mv plugin plugin_・・・・・・・・・・・・。(´д`;;;
~/public_html/nikki> /usr/bin/time ./sakura.cgi > /dev/null
0.64 real 0.37 user 0.08 sys
~/public_html/nikki> mv plugin_ plugin
~/public_html/nikki> /usr/bin/time ./sakura.cgi > /dev/null
2.24 real 0.87 user 0.20 sys
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ G兄
└ 山銀
└ G兄