プロジェクト

全般

プロフィール

バグ #1242

scoreが何度も呼ばれる

あひる 家鴨約1ヶ月前に追加. 9日前に更新.

ステータス:
まだダメ
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
core/plugin/score/select.rb
ブランチ:
topic/1242-score-cache
クラッシュする:
いいえ

説明

TLのフォーカスを移動するだけで、score_by_score メソッドが何度も呼ばれているようです。

どう動作すれば正しいのかわからないのですが、このやり取りを元に報告だけします。
https://social.mikutter.hachune.net/@ahiru/99968637401718162

該当箇所は以下です。
https://dev.mikutter.hachune.net/projects/mikutter/repository/revisions/master/entry/core/plugin/score/select.rb#L6

これはscoreとして意図した動作でしょうか。

1242-score-memoize.patch (1.32 KB) 1242-score-memoize.patch cob odo, 2018-05-13 00:08

関連するチケット

関連している バグ #1239: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける実装待ち

関係しているリビジョン

リビジョン 9b1ea080 (差分)
toshi_a 初音10日前に追加

miraclepainter: scoreをキャッシュした結果を何故か使ってない refs #1242

履歴

#1 cob odo約1ヶ月前に更新

コードを見た限り、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と同じようにそのまま使って構わないのかよくわかりませんが、一応パッチを添付します。(パッと見それらしく動いていますが……)

#2 toshi_a 初音約1ヶ月前に更新

  • 関連している バグ #1239: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける を追加

#3 あひる 家鴨29日前に更新

TextNoteのみの場合はなんども呼ばれることはなくなりました。
その他のハッシュタグやユーザー名が入っているものは以前として大量に呼ばれています。

#4 toshi_a 初音28日前に更新

  • ステータス分類待ち から 実装待ち に変更

#5 toshi_a 初音10日前に更新

  • ステータス実装待ち から レビュー待ち に変更
  • ブランチtopic/1242-score-cache にセット

金具さんのパッチを参考に修正してみました。多数呼ばれている問題は解消されています。

#6 toshi_a 初音10日前に更新

  • 担当者あひる 家鴨 にセット

#7 あひる 家鴨9日前に更新

  • ステータスレビュー待ち から まだダメ に変更
  • 担当者あひる 家鴨 から toshi_a 初音 に変更

worldon と slack プラグインでぞれぞれ 1242 ブランチを試したところ、 `score_of` は出現時しか呼ばれていませんが、
`score_by_score` が依然として TextNote 以外でフォーカスされるたびに大量に呼ばれてしまっています。

他の形式にエクスポート: Atom PDF