misskey icon indicating copy to clipboard operation
misskey copied to clipboard

言語ごとにバンドルを生成する

Open syuilo opened this issue 1 year ago • 22 comments

Summary

https://github.com/misskey-dev/misskey/pull/14448#issuecomment-2298779498

Purpose

https://github.com/misskey-dev/misskey/pull/14448#issuecomment-2298779498

Do you want to implement this feature yourself?

  • [ ] Yes, I will implement this by myself and send a pull request

syuilo avatar Aug 22 '24 03:08 syuilo

(ビルド時間すごそう)

samunohito avatar Aug 22 '24 03:08 samunohito

それぞれ独立だと思うので並列でやればある程度解消しそう

KisaragiEffective avatar Aug 22 '24 03:08 KisaragiEffective

  • 工夫すれば共通部分のビルドは一回だけで済むようにできる可能性がある
  • マルチコアを活用してビルドできればそこまでビルド時間は伸びなさそう
  • production build時だけそのようにすれば開発体験への影響は抑えられそう
  • productionについてもユーザー側でビルドしなくても良いようにする(dockerであれば既にそうなっている)

syuilo avatar Aug 22 '24 03:08 syuilo

  • jsonを直接importする(設定言語のやつだけ分岐してimportするような)
  • shikiの時みたいな感じでjsonをバンドルに含めずにおく

みたいな・・・?

samunohito avatar Aug 22 '24 04:08 samunohito

バージョンアップ時など、言語リソースの更新が必要となった場合にリソースを取り直す仕組みも必要そうです (json単独でfetchしてたけど、今度はフロントエンド全体になる…?)

samunohito avatar Aug 22 '24 04:08 samunohito

言語データをプレーンなJavaScriptオブジェクトにするだけにするのならJSONにしてパースさせたほうがパフォーマンスがいいらしい

https://www.youtube.com/watch?v=ff4fgQxPaO0

kakkokari-gtyih avatar Aug 22 '24 04:08 kakkokari-gtyih

バージョンアップ時など、言語リソースの更新が必要となった場合にリソースを取り直す仕組みも必要そうです (json単独でfetchしてたけど、今度はフロントエンド全体になる…?)

バンドルに含まれるのでそういう仕組みは不要になる(それが目的)

syuilo avatar Aug 22 '24 04:08 syuilo

ViteでVueのテキスト部分をハードコードする感じに書き換えながらバンドルするみたいな感じだと思ってたけど

工夫すれば共通部分のビルドは一回だけで済むようにできる可能性がある

だからそういうわけでもないのか(工夫のしようなさそう)

tamaina avatar Aug 22 '24 04:08 tamaina

ViteでVueのテキスト部分をハードコードする感じに書き換えながらバンドルするみたいな感じだと思ってたけど

i18nはVueに限ったことではないからなぁ

(工夫のしようなさそう)

rollupをいじくりまわせば不可能ではない気がする

syuilo avatar Aug 22 '24 04:08 syuilo

Vite/rollupでビルドしてから(ないしは1つのファイルのビルドで言語ごとのファイルを生やす感じで)テキストを置き換えたバージョンを作るとかなのかしら. (マルチスレッドとか言ってるからビルド作業する前に一旦全部のファイルのテキストを置き換えるみたいな感じを想像してた

tamaina avatar Aug 22 '24 05:08 tamaina

v-forとかの中で i18n.ts._permissions[permission] みたいな呼び方してる場合どうするのか気になる

<template>
  <div v-for="permission in permissions">{{ i18n.ts._permissions[permission] }}</div>
</template>

<script setup lang="ts">
import { permissions } from 'misskey-js';
import { i18n } from '@/i18n.js';
</script>

kakkokari-gtyih avatar Aug 23 '24 02:08 kakkokari-gtyih

それはインライン化は無理だわね

syuilo avatar Aug 23 '24 02:08 syuilo

それはインライン化は無理だわね

こういうのに出会ったらどっちにしろ言語jsonみたいなものを呼び出す必要があるということ?

kakkokari-gtyih avatar Aug 23 '24 02:08 kakkokari-gtyih

それはインライン化は無理だわね

こういうのに出会ったらどっちにしろ言語jsonみたいなものを呼び出す必要があるということ?

まあこの構造になっている部分を全面的に改修してなくすというのもあるけど(いけるか?)

kakkokari-gtyih avatar Aug 23 '24 02:08 kakkokari-gtyih

それはインライン化は無理だわね

こういうのに出会ったらどっちにしろ言語jsonみたいなものを呼び出す必要があるということ?

そう

インライン化(事前コンパイル)は副次的な効果であって主目的ではない

syuilo avatar Aug 23 '24 02:08 syuilo

Viteが高速化してきた(し今後より高速化していく可能性は高い)から仮にビルドが今より遅くなったとしてもそこまで致命的ではなさそう

syuilo avatar Mar 16 '25 06:03 syuilo

極力i18n.tsへの参照をインライン展開して、インライン展開できなかったとこだけを残してjsにバンドルするようにすれば結果的に翻訳データがcode-splittingされたことになり、翻訳データが必要になるまで読み込まれなくなり無駄が減るメリットもある (https://github.com/misskey-dev/misskey/issues/14453#issuecomment-2306068001 のような動的なi18nへの参照は廃止)

syuilo avatar Mar 16 '25 06:03 syuilo

インライン展開は後々やるとしてとりあえず言語ごとにバンドルを生成したい

syuilo avatar Mar 16 '25 06:03 syuilo

viteで複数のバンドルを生成する方法の情報がない webpackだと簡単にできたんだけど

syuilo avatar Mar 16 '25 07:03 syuilo

5年前のものだけどある程度実装の参考になりそう https://www.npmjs.com/package/@nicholasperetti/rollup-plugin-i18n

syuilo avatar Mar 16 '25 09:03 syuilo

ヌァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァンンンンオオオオンンオンオンオンオンンンンンンンンン゛ン゛!!!!!!!!!!!!!!!!

syuilo avatar Mar 19 '25 07:03 syuilo

焦眉の急

syuilo avatar Jun 16 '25 04:06 syuilo

やる必要がある

syuilo avatar Aug 01 '25 05:08 syuilo

?locale=とかで実装ってできるのかなぁって今ちょっと考えて(実装施行)いる。

anatawa12 avatar Aug 04 '25 14:08 anatawa12

?lang= で別ファイルとして扱うこと自体はできそうでした。ビルド時間が 600s に伸びたので、(上の議論にもあったように)いい感じに並列化する必要性はありそうでした。

https://github.com/anatawa12/misskey/tree/188b08b19b59e2ae9aadb708604286c023d99741 https://github.com/anatawa12/misskey/tree/per-locale-bundle

anatawa12 avatar Aug 04 '25 17:08 anatawa12

WIPですがPRにしました #16369

anatawa12 avatar Aug 06 '25 05:08 anatawa12