misskey icon indicating copy to clipboard operation
misskey copied to clipboard

ページがバックグラウンド状態のときはタイムラインを更新しないようにする

Open tamaina opened this issue 5 years ago • 10 comments

Summary

長時間のバックグラウンド処理から復帰したとき新規ノートが大量に表示されるのは、「Misskey重い」と言われる原因のひとつかと思われる。

ページがバックグラウンド状態のときはページのスクロールが中間であるときと同じような処理にすればいいと思う。

#6384 の代替

~~Related to #6041~~

tamaina avatar May 18 '20 16:05 tamaina

#6041 は関係ない

tamaina avatar May 18 '20 18:05 tamaina

c2-2使ってるから忘れてるけどこれって実装されてなかったっけ…

tamaina avatar Aug 24 '21 14:08 tamaina

プールしているノートや通知は、Vueが起動しないのでノートや通知の削除とかノート内のリアクションの増加とかは見逃してしまうことになっているわね。
これはバックグラウンドに限らず、下にいるときにも起きている。 https://github.com/misskey-dev/misskey/pull/6388#issuecomment-652892829

つまり #6388 のように単純にキューに追加するべきではない

NotesPoolみたいなクラスを作って管理するべきなのかなと
https://github.com/misskey-dev/misskey/pull/6388#issuecomment-678316026

#7910 と同じアイデア
(キューについても管理することを考えると、ノートや通知などの個々のSFCではなく、pagination.vueからノートなどの管理クラスを呼び出してやる必要がありそう?)

tamaina avatar May 08 '22 05:05 tamaina

(ノートだけの処理をpagination.vueでやるのは煩雑な気もするけどpagination.vueのキューは仕方ないか)

tamaina avatar May 08 '22 05:05 tamaina

今の実装だとページがバックグラウンドでもノートはタイムラインに追加されていく

それがそうではないようです。

長時間放置されているとブラウザはDOMの変更をキューに積んでいくらしく、結果的にタブに移動したときにたくさんのDOMの変更が一度に発生することになります。
https://github.com/misskey-dev/misskey/pull/6388#issuecomment-631397074

ちゃんとバックグラウンドで更新されている
(FirefoxのおかげなのかVue3になってからなのかは知らない)

このPRを適用すると、ページがバックグラウンドだとノートが追加されないので、ページ復帰したときに大量のノートが追加されて重くなりそう
https://github.com/misskey-dev/misskey/pull/6388#issuecomment-631397074

p1.a9z.devで試してみたところ、 #8209 があるとアニメーションがあるのでたしかに重くなる

tamaina avatar May 08 '22 07:05 tamaina

バックグラウンドになってある程度時間が経ったらWebSocketは切断してしまって、復帰したらタイムラインをAPIから読み直すので良さそう

tamaina avatar Jan 05 '23 10:01 tamaina

こちら引き取ってもよいですか

対処法が

バックグラウンドになってある程度時間が経ったらWebSocketは切断してしまって、復帰したらタイムラインをAPIから読み直すので良さそう

ならMkTimelineで切断・復帰と tlComponent.pagingComponent?.reload(); をvisibility切り替えと連動させる。

それか、

https://github.com/misskey-dev/misskey/issues/6041

より、音を出し続けるならMkPaginationでpretend()がunshiftIems()ではなくprependQueue()を呼ぶようにする

のどちらかと思っています。

yszkst avatar Feb 21 '23 17:02 yszkst

後者で良さそう

tamaina avatar Feb 22 '23 00:02 tamaina

ただvisibilitychange visibleになってタイムラインに流し込むときにアニメーションが動くととても重たくなるので気をつけてほしいです

tamaina avatar Feb 22 '23 00:02 tamaina

わかりました!

yszkst avatar Feb 22 '23 08:02 yszkst