「参加費: 無料」、これとても重要。
第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 秒未満になった。実時間じゃないので注意。
最近のコメント