Emojiの型に画像の縦横比を含めて欲しい
Summary
misskeyのapiにおけるEmojiのスキーマの型は
aliases: string[]
name: string
category: string | null
url: string
localOnly?: boolean
isSensitive?: boolean
roleIdsThatCanBeUsedThisEmojiAsReaction?: string[]
ですが、ここに
width: number
height: number
もしくは
# width / height * 128
normalizedWidth: number
を追加して欲しいです。
Purpose
要素のwidthをあらかじめ固定することでサイズ変化による再レンダリングを減らせる。
- Playやウィジェットで絵文字サイズを考慮したUI構築ができる。
Do you want to implement this feature yourself?
- [ ] Yes, I will implement this by myself and send a pull request
自分個人としては、実装コストのわりに得られるメリットが小さく、かなり渋い印象を持ちました。
バックエンド観点
- 現状のemojiテーブルにはwidth/heightに相当する情報が無い
- 絵文字登録時の元ファイル(drive_file)への参照も保持していないため、サーバ側でサイズを取得することも難しい
- 仮にwidth/heightカラムを追加しても、既存データを埋めるには全件の画像をダウンロードしてサイズを計測するツールが必要で、移行コストが非常に重い
フロントエンド観点
- 「画像ロードによるサイズ変更」と「Vueコンポーネントの再レンダリング」は無関係な気がしてて、width/heightをDBに持ってもレンダリング回数は変わらないんじゃないかと…(レイアウトシフト低減という文脈であれば理解できます)
既存データは諦めてそのままでも良さそう
「画像ロードによるサイズ変更」と「Vueコンポーネントの再レンダリング」は無関係な気がしてて
どっちかというとサードパーティクライアントでネイティブにレンダリングするときの話かなと思った
(サードパーティアプリの文脈無いような…それはさておき)
カラムとプロパティだけ用意して、レスポンスにサイズが含まれていればそれを使えるようにするのであれば…まあ… (既存データへのサイズ付与は運用時の責務とし、必要に応じて…)
「画像ロードによるサイズ変更」と「Vueコンポーネントの再レンダリング」は無関係な気がしてて、width/heightをDBに持ってもレンダリング回数は変わらないんじゃないかと…(レイアウトシフト低減という文脈であれば理解できます)
レイアウトシフトの語を知らなかったので再レンダリングと表現しましたが、意図としてはレイアウトシフトを指していました。
@syuilo やるやらだけ判断願います 🙏
検討中
縦横比があると、横に長い絵文字は絵文字ピッカーで2マス分使って見やすくできるなどの芸当が可能になる
(赤枠で囲ってあるようなものは正方形の枠に収めると見にくくなるが、横に2マス使えると見やすくできる)
related: #12469