Comments (7)
(実装を軽く調査したメモ書きです)
UserEntityServiceには既にAPIの実行者と対象ユーザの関係を調べる機能は存在するが、これはUserスキーマをUserLiteよりも詳細なもので呼び出した時にのみ返される。しかし、NoteEntityServiceでMiNoteをpack化する際はUserLiteでの呼び出しとなっており、詳細情報の取得は行われていない。
pack化時にUserDetailedを使うようにすればフォロー関係も同時に取得可能で、本件の実現も可能かと思われるが実行時の負荷が懸念…(キャッシュがあるとはいえ、追加情報をそれなりに取るので)
NoteEntityServiceのpackManyでユーザ情報をあらかじめ取得してMapで引き回せばマシになるかとは思われるが…
from misskey.
別途users/relations APIを呼び出せばいい気もするけど、まあ毎ノートそれをやるのはちょっとという感じではある
from misskey.
別途でusers/relations を呼び出すのであれば、userEntityServiceのpack段階で行われるgetRelationの情報を元にフォロー状態を取得させて、userLiteに新たにfollowStateのようなenumを定義して追加してあげれば現状とそこまで動作的には変わらない気がしますね。
from misskey.
mastodon上で参考に挙げた実装を作ったのえる氏に解説して頂けたのですが、かなり重たそうな処理をしていたみたいです。
https://fedibird.com/web/statuses/112364167105554633
キャッシュに無いユーザーを見かけたらRelationshipを参照しにいく仕組みだそうで、misskey.ioのローカルや連合タイムラインだとなかなか凄いことになりそうですね……
from misskey.
タイムライン上でのフォロー情報という観点では、Related: #11079, #12320
from misskey.
そこら辺の負荷についてmisskey上のコードを見ていたんですが、
結論から言うと私が調べた限りでは、ユーザー取得時のRelationの参照は最終的にはすべてローカル上でのみ行われており、cacheから取ってきていなく、データベースから直接参照されています。
なので増えるとしても取得時に毎回クエリが打たれる処理くらいだと思っています(それでもioレベル、ましては中堅でもえげつない処理だと思われ)。
※連合側のフォロー・フォロワー情報の処理はapのinbox側でいい感じに行われているっぽい感じがしたので省きました。
可能性があるとするならばcacheServiceにいい感じにfollowingsCacheが存在しているのでこれをfollowersCacheとかでいい感じに出来たりしないかなってことですかね...
(キャッシュがあるとはいえ、追加情報をそれなりに取るので)
まさにこれなんですよね
from misskey.
パフォーマンス上の懸念はやはり大きいのですねぇ……
from misskey.
Related Issues (20)
- ハイライト(みつける)のアンケート欄にて、(センシティブ)チャンネルのものが含まれてしまう HOT 2
- パスキー登録時、二回パスワードと確認コードを入力する必要があるのが煩雑 HOT 2
- "センシティブなメディアの検出"機能を強化
- 絵文字がたくさんあるとカスタム絵文字一覧ページが重い HOT 6
- ページ機能のオブジェクト構造見直し
- リアクションピッカーの絵文字検索欄への直接入力で一部のUnicode絵文字をリアクションできない
- Migration Bug Cannot create an alias if the UI language is spanish HOT 1
- Sensitive Media Warning Not Removed in Profile 'Files' Section HOT 1
- tagsとuser-tagsのページを簡単に切り替えられるようにして欲しい HOT 6
- "TLに他の人への返信を含む", "ファイル付きのみ" オプションは選択不可にする代わりに有効なものが入れ替わるようにして欲しい HOT 6
- 認証周りの改善
- 「タイムラインのリアルタイム更新を無効にする」とデータセーバーの設定を同じ箇所に纏めて欲しい HOT 3
- `pnpm dlx typeorm migration:generate`を実行時にesm moduleとライセンスヘッダを生成するようにしたい HOT 1
- バックエンドのSentryサポート
- meilisearch fetch error 500
- コントロールパネルのクイックアクションにある照会で"TODO"アラートが出る部分の機能を実装する
- RATE_LIMIT_EXCEEDED while using API with admin privileges HOT 2
- 「パスワードを忘れた」の画面に加えて「ログインIDを忘れた」も欲しい HOT 3
- タグページにおいて、ローカル限定の絞り込みを可能にする HOT 3
- `users/show`のパラメーターのusernameにホストURL、hostにユーザー名を渡しても通ってしまう HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from misskey.