Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
tamaina opened this issue May 18, 2020 · 10 comments
Labels
✨Feature This adds/improves/enhances a feature packages/frontend Client side specific issue/PR

Comments

@tamaina
Copy link
Member

tamaina commented May 18, 2020

Summary

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

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

#6384 の代替

Related to #6041

@tamaina tamaina added the ✨Feature This adds/improves/enhances a feature label May 18, 2020
@tamaina
Copy link
Member Author

tamaina commented May 18, 2020

#6041 は関係ない

@tamaina
Copy link
Member Author

tamaina commented Aug 24, 2021

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

@tamaina
Copy link
Member Author

tamaina commented May 8, 2022

プールしているノートや通知は、Vueが起動しないのでノートや通知の削除とかノート内のリアクションの増加とかは見逃してしまうことになっているわね。
これはバックグラウンドに限らず、下にいるときにも起きている。
#6388 (comment)

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

NotesPoolみたいなクラスを作って管理するべきなのかなと
#6388 (comment)

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

@tamaina
Copy link
Member Author

tamaina commented May 8, 2022

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

@tamaina
Copy link
Member Author

tamaina commented May 8, 2022

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

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

長時間放置されているとブラウザはDOMの変更をキューに積んでいくらしく、結果的にタブに移動したときにたくさんのDOMの変更が一度に発生することになります。
#6388 (comment)

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

このPRを適用すると、ページがバックグラウンドだとノートが追加されないので、ページ復帰したときに大量のノートが追加されて重くなりそう
#6388 (comment)

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

@tamaina
Copy link
Member Author

tamaina commented Jan 5, 2023

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

@yszkst
Copy link
Contributor

yszkst commented Feb 21, 2023

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

対処法が

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

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

それか、

#6041

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

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

@tamaina
Copy link
Member Author

tamaina commented Feb 22, 2023

後者で良さそう

@tamaina
Copy link
Member Author

tamaina commented Feb 22, 2023

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

@yszkst
Copy link
Contributor

yszkst commented Feb 22, 2023

わかりました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature packages/frontend Client side specific issue/PR
Projects
None yet
2 participants