表紙 | 新規 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

2005/08/30 - だから肝心な事に気づくのがいつも遅いんだ

差分表示


&color(ffff00,だから肝心な事に気づくのがいつも遅いんだ)

* つくばエクスプレス
実は初日にこっそり乗っていました。

だって、初物は寿命が延びますから :-)

* ライトノベル新刊案内
&link(CAXの日記 - 【FANTASY Bookmark】の後継サイトは?,http://d.hatena.ne.jp/CAX/20050825/shinkan)

なにげにアンテナに引っかかってビックリ。

携帯電話で閲覧可能と書かれていますが、i-modeはutf8に対応していないのでダメだったと思います。
携帯電話を意識しているので閲覧可能というよりも、凝ったhtmlじゃないので読めるって感じです。

で、携帯電話用のエンジンを作ろうと(再び)思ってソースをゴジャゴジャやった結果、結構大変そう。。。
ぼちぼち作っていきます、たぶん。最初のターゲットはau端末ですね。これならutf8読めるし、私が持っているので動作確認できますから。
i-modeはその後気力が残っていたら対応かなぁ (^^;;

* 正規表現とスピード
検索のインデックス更新が0.5秒近くかかっているのが不思議だったので、各行の処理時間を測定したら
正規表現の処理が0.4秒かかっていたんですよ。

で、もっとシンプルな形にして処理を分割したところ一桁速くなりました。
う〜ん、ちょっとした書き方の違いでこんなにスピードが違うもんなんですねぇ。

↓ この2行で0.4秒&br()

 $infobase{$search_index_name}  =~ s/^$name\t.*\n|\n$name\t.*\n|\n\n/\n/g;&br()
 $infobase{$search_index_name}  =~ s/^\n//;
 $infobase{$search_index_name}  =~ s/^$name?t.*?n|?n$name?t.*?n|?n?n/?n/g;
 $infobase{$search_index_name}  =~ s/^?n//;

で、書き直したのが ↓ コレ。&br()
 if(not ($infobase{$search_index_name}  =~ s/\n\Q$name\E\t.*\n/\n/g)){&br()
 	$infobase{$search_index_name}  =~ s/^\Q$name\E\t.*\n//g;&br()
 if(not ($infobase{$search_index_name}  =~ s/?n?Q$name?E?t.*?n/?n/g)){
 	$infobase{$search_index_name}  =~ s/^?Q$name?E?t.*?n//g;
 }

* o
なにげなく正規表現使っているところにoオプションを入れてみました。これは変数を含む正規表現のコンパイルを一度しか行わないオプションです。定数として使っている変数の場合に効果的らしいです。

で、結果。適当に入れただけで書き込み速度が1.5倍になりました。何と言うか、「oオプションさんごめんなさい。甘くみてました」って感じです。う〜む、これは使っていかないと。

** 修正
よくよく確認したらテスト環境に問題がありました。oオプションだけだと、そこまで言う程には違いが出なかったです。やらないよりはいいけど、多少の違いです。

----
[[2005年08月の日記]]一覧へ
-----
[[#rtrackback]]

先頭へ