バグ #1242
完了scoreが何度も呼ばれる
説明
TLのフォーカスを移動するだけで、score_by_score メソッドが何度も呼ばれているようです。
どう動作すれば正しいのかわからないのですが、このやり取りを元に報告だけします。
https://social.mikutter.hachune.net/@ahiru/99968637401718162
これはscoreとして意図した動作でしょうか。
ファイル
関連するチケット
cob odo さんが6年以上前に更新
コードを見た限り、Gdk::MiraclePainter#main_messageから呼ばれる、Gdk::MarkupGenerator#description_attr_listの中でmemoizeされていないscore_ofが呼ばれているようです。
main_messageの再描画タイミングで呼ばれるのかなと思います。実際、score_ofの中で適当にputsしながらログを流していると、MiraclePainter上でカーソルをぐるぐる動かすとめちゃくちゃ多く出力されます。
Gdk::MiraclePainterはinclude Gdk::MarkupGeneratorしているので、memoize def scoreの定義をGdk::MarkupGeneratorに移し、description_attr_listからはscoreメソッドを呼ぶようにすると、そのような挙動は解消されました。
memoizeの挙動をよく理解していないため、moduleが持つメソッドに対してもclassと同じようにそのまま使って構わないのかよくわかりませんが、一応パッチを添付します。(パッと見それらしく動いていますが……)
toshi_a 初音 さんが6年以上前に更新
- 関連している バグ #1239: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける を追加
toshi_a 初音 さんが6年以上前に更新
- ステータス を 実装待ち から レビュー待ち に変更
- ブランチ を topic/1242-score-cache にセット
金具さんのパッチを参考に修正してみました。多数呼ばれている問題は解消されています。
toshi_a 初音 さんが6年以上前に更新
- ステータス を まだダメ から レビュー待ち に変更
- 担当者 を toshi_a 初音 から あひる 家鴨 に変更
score_by_scoreの結果を短期間キャッシュするようにしました。
60〜120秒で開放されますが、この数値にはあまり根拠はないです。
Scoreは同じModelについて短期間にたくさん参照される一方で、それが終わったらめったに参照されなくなるので、短期間で開放するのが良いかなと思いました。