脳ざらし紀行


2004-07-09

_ [まんが] もえよん

今日発売。

■追記。買った。すげーつまらん。

_ [経済] ノーベルレクチャー アマルティア・セン教授

「参加費: 無料」、これとても重要。

_ [ネット] プログラマーのための法律入門

第13回 SEA 関西プロセス分科会。みかままの覚書新館より。

_ [ネット] リンク元表示の高速化

ふと気がつくとこの脳ざらし紀行の表示が遅くなっていた。リンク元表示が原因みたい。記録されているリンク元の数が増えていくのに比例して tDiary の各日付での表示は遅くなっていく。最新のページでの表示はリンク元の数が増えても遅くならない。リンク元表示を非表示にしていればやっぱり遅くならない。とはいえ、tDiary を使っているのだからリンク元は表示したいし、それなりに整理された形で表示したい。

リンク元表示の基本動作はループを回しての正規表現のマッチング。このとき正規表現のマッチング動作の合計回数はだいたい「リンク元の数×設定している正規表現の数」になる。表示を速くするにはこの回数を減らすしかない。

で、思いつく方法は、最初に設定してある正規表現を合体して巨大な正規表現を作っておく。その巨大な正規表現で判定してから個々の正規表現のマッチングを行なう。

00default.rb の referer_of_today_long を書き直してみると

def referer_of_today_long( diary, limit )
  return '' if not diary or diary.count_referers == 0
  result = %Q[<div class="caption">#{referer_today}</div>\n]
  result << %Q[<ul>\n]
  big_reg = Regexp.new( @referer_table.map{|a| a[0]}.join('|') )
  diary.each_referer( limit ) do |count,ref|
    if big_reg =~ ref
      tmp_table = @referer_table
    else
      tmp_table = []
    end
    result << %Q[<li>#{count} <a href="#{CGI::escapeHTML( ref )}">#{CGI::escapeHTML(  disp_referer( tmp_table, ref ) )}</a></li>\n]
  end
  result + '</ul>'
end

こんな感じ。@referer_table に「早目にマッチングに失敗する正規表現」を書いておけば速くなる。

というか、早く tDiary のバージョンアップしないと。

あおきにっき つっこみつきあおきにっき つっこみつきおまぬけ活動日誌おまぬけ活動日誌

検索結果からのリンク元を非表示にして、なんだかんだで、各日付の表示が user time で計ってだいたい 1 秒未満になった。実時間じゃないので注意。

お名前:
E-mail:
コメント:
本日のリンク元

最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ «前の日記(2004-07-05) 最新 次の日記(2004-07-10)» 編集