Project

General

Profile

バグ #1242

scoreが何度も呼ばれる

Added by あひる 家鴨 about 1 year ago. Updated about 1 year ago.

Status:
終了
Priority:
通常
Target version:
プラグイン名:
core/plugin/score/select.rb
ブランチ:
topic/1242-score-cache
クラッシュする:
No

Description

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として意図した動作でしょうか。


Files

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

Related issues

Related to バグ #1239: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける終了Actions

Associated revisions

Revision 9b1ea080 (diff)
Added by toshi_a 初音 about 1 year ago

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

Revision a2849239 (diff)
Added by toshi_a 初音 about 1 year ago

score_by_scoreの結果を短時間キャッシュする refs #1242

History

#1

Updated by cob odo about 1 year ago

コードを見た限り、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

Updated by toshi_a 初音 about 1 year ago

  • Related to バグ #1239: 絵文字のあとにメンションがあるとリンクが正しく作らず、リンクもある場合大量のscore_by_regexpが実行され続ける added
#3

Updated by あひる 家鴨 about 1 year ago

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

#4

Updated by toshi_a 初音 about 1 year ago

  • Status changed from 分類待ち to 実装待ち
#5

Updated by toshi_a 初音 about 1 year ago

  • Status changed from 実装待ち to レビュー待ち
  • ブランチ set to topic/1242-score-cache

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

#6

Updated by toshi_a 初音 about 1 year ago

  • Assignee set to あひる 家鴨
#7

Updated by あひる 家鴨 about 1 year ago

  • Status changed from レビュー待ち to まだダメ
  • Assignee changed from あひる 家鴨 to toshi_a 初音

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

#8

Updated by toshi_a 初音 about 1 year ago

  • Status changed from まだダメ to レビュー待ち
  • Assignee changed from toshi_a 初音 to あひる 家鴨

score_by_scoreの結果を短期間キャッシュするようにしました。

60〜120秒で開放されますが、この数値にはあまり根拠はないです。
Scoreは同じModelについて短期間にたくさん参照される一方で、それが終わったらめったに参照されなくなるので、短期間で開放するのが良いかなと思いました。

#9

Updated by Izumi Tsutsui about 1 year ago

測定なしの体感だけですが、
#1231 の topic/1231-fix-rarely-world-shifter-does-not-work のツリーに
追加で 9b1ea080a2849239 の差分を当ててテストしている範囲では
TL上でカーソルを動かした時の反応は良くなっているような気がします。

#10

Updated by あひる 家鴨 about 1 year ago

  • Status changed from レビュー待ち to マージ待ち

score_by_score_nocache が大量に呼び出されることはなくなり、score_by_score のキャッシュが働いていることを確認しました。
1分程度放置してからメッセージにフォーカスすると score_by_score_nocache が走っているのを確認したので、意図された動作をしているようです。
ありがとうございます。

#11

Updated by toshi_a 初音 about 1 year ago

merged.

#12

Updated by toshi_a 初音 about 1 year ago

  • Status changed from マージ待ち to 終了

Also available in: Atom PDF