Metaで実験的な‘lazy_loaded_categories’機能が有効化

:information_source: このプロジェクトは現在一時中断されています。将来的に再開する可能性があり、その場合はこちらで最新情報をお知らせします。

カテゴリー数の多いコミュニティを支援するための実験的な機能を導入します。:rocket:

この数ヶ月間、私たちはDiscourseサイトが多数のカテゴリーを持つコミュニティ(それだけではありません!)でより良く機能するように、懸命に取り組んできました。これにより、管理者は使い慣れたフレンドリーなUXを維持しながら、数千のカテゴリーを作成できるようになります。

これはまだ実験的な機能であり、lazy_loaded_categories_groups サイト設定を変更することで有効にできます。現在、デフォルトでは無効になっています。

:gear: 仕組みは?

現在、Discourseコミュニティにアクセスすると、すべてのカテゴリーデータがロードされます。これは「 eager loading(積極的ロード)」と呼ばれ、多数のカテゴリーを持つサイトにとっては理想的ではありません。なぜなら、最初のレンダリング前に大量の情報が転送されるため、全体のロード時間が長くなるからです。

新しい方法は「lazy loading(遅延ロード)」と呼ばれ、カテゴリーに関する情報のロードを、本当に必要になるまで遅らせます(例:カテゴリーの検索、移動、リンク、トピックや投稿の閲覧時など)。転送されるデータが少なくなれば、ロード時間が短縮され、ユーザーもハッピーになります!:star:

:discourse: メタのメンバーであるあなたにとって、これは何を意味しますか?

私たちはこの機能を社内で徹底的にテストしてきましたが、実施した作業の範囲を考えると、バグが混入している可能性がわずかにあります。カテゴリーに関連して何か不具合を見つけた場合は、このトピックへの返信としてお知らせいただくか、Bug トピックを作成してください。

:people_holding_hands: あなたやあなたのコミュニティにとって、これは何を意味しますか?

あなたがホストされているか、セルフホストされているかに関わらず、この機能はデフォルトで無効になっており、目に見える変更はないはずです。

しかし、コミュニティを多くのカテゴリーを持つように拡張することを検討している場合は、この機能を有効にすることを強くお勧めします。

将来的には、これをデフォルトで有効にし、カテゴリーを「eager load」するコードを最終的に非推奨にして削除する予定です。

:technologist: プラグインおよびテーマ開発者にとって、これは何を意味しますか?

一般的に、ほとんどのプラグインについては、コアのカテゴリーコンポーネントを使用しているか、プリロードされたデータを使用している限り(例:ページロード時にすでに表示されているカテゴリーのみをクエリする、これはすでにプリロードされていることを意味します)、必要な変更はほとんど、あるいはまったくないはずです。

まだロードされていないカテゴリーの情報を利用しようとすると、いくつかの問題が発生する可能性があります。Category.findByIds メソッドは、すでにロードされているカテゴリーのみを返し続けますが、情報がまだロードされていない場合は、Category.asyncFindByIds がサーバーに対してルックアップを実行する可能性があります。

「いいね!」 44

投稿の下にあるリンクのいずれかを使用して別のカテゴリのトピックに移動すると、カテゴリ情報が欠落しているようです。Contributing translations to Discourse を新しいタブで開き、Switching from Transifex to Crowdin に移動すると、次のようになります。


リロードすると、カテゴリが表示されます。

「いいね!」 6

#site-feedback:theme-feedback のトピックを投稿した後、そのカテゴリのトピックのカテゴリバッジが表示されなくなりました。

「いいね!」 4

コンポーザー内の検索機能は、一致するカテゴリがあるかどうかを判断できません。

「いいね!」 3

それは遅延読み込みされたカテゴリにも関連していますか?

「いいね!」 2

はい。ドキュメントプラグインを壊していたため、一時的に lazy_load_categories を無効にしました。

「いいね!」 5

この実験をこちらで再度有効にしました。前回有効になってから修正された点は以下の通りです。

  • ヘッダーのカテゴリが正しく表示されるようになりました。特に、投稿リンクやおすすめトピックを使用してあるトピックから別のトピックに移動した場合。

  • 新しいトピックを、以前に移動していないカテゴリで作成した後、バッジのスタイルが正しく表示されるようになりました。

  • Docsプラグインがカテゴリデータをプリロードするようになり、/docs ページが正しくレンダリングされるようになりました。

  • その他、内部レビューで発見されたバグ。

残っているバグは、特定のクエリ(短いクエリやストップワードのみを含むクエリ)で検索結果が表示されないことだけです。

検索をより強力にしたいと考え、全文検索エンジンをカテゴリに拡張しましたが、これは意図しない副作用です。以前の検索アルゴリズムに戻す必要があると考えていますが、現在も調査中です。

「いいね!」 7

/about のカテゴリモデレーターのカテゴリが表示されません

そして、下書きを見ると、カテゴリも表示されません。

グループまたはユーザーのアクティビティページ、およびプロフィール内の通知(https://meta.discourse.org/my/notifications/responses など)では、カテゴリが読み込まれません。

メッセージ内のリンクを使用して新しいトピックを開始するためにコンポーザーを開くとき、または受信トレイの「新規メッセージ」をクリックして、コンポーザーの左上にある封筒アイコンを使用して下書きを新しいトピックの下書きに変換するとき、カテゴリを選択するオプションがありません。

「いいね!」 8

/categories を開いても、Documentation のサブカテゴリがすべて表示されません(#documentation:theme-developers はリロード後に Documentation をクリックするまで消えます)。

また、カテゴリを検索するためのオートコンプリートも機能しません。ほとんどのカテゴリはリロード後に表示されません。

「いいね!」 3

関連トピックのリストでもカテゴリが欠落しています。

そして、2番目のスクリーンショットのカテゴリを読み込むためにトピックを訪問したところ、2番目の#announcements:blogトピックで、トピックタイトルの下のカテゴリが欠落していることに気づきました。これは関連トピックが機能していれば発生しないはずなので、重要ではないと仮定します。

「いいね!」 4

これは、3.2.1安定版の私のプラグインの1つで問題を引き起こしているようです。

Site.current().categories を検査し、遅延読み込みが有効になっている場合、必要なカテゴリ(現在のトピックのカテゴリなど)のみが表示されますが、すべての preloaded_category_custom_fields が欠落しているようです。

遅延読み込みをオフにすると(他のすべてのカテゴリとともに)表示されます。

したがって、正しいカテゴリはプリロードされていますが、プリロードされたフィールドが欠落しています。

「いいね!」 1

修正されました。:white_check_mark:

こちらも修正されました。:white_check_mark:

こちらも修正されました。:white_check_mark:

その他の問題については、現在対応中です。フィードバックをいただき、誠にありがとうございます、@Moin様

カテゴリがどのように読み込まれたかによります。カテゴリデータの一部が読み込まれる可能性のあるコードパスがいくつかあることは同意します。この問題についてはチームと連絡を取りますが、フロントエンドが必要なデータをアクセスする前にリクエストする状態に向かっているためです。

公開されているプラグインですか?もしそうであれば、確認できます。一般的に、最も人気のあるプラグインは、「カテゴリの遅延読み込み」が有効になっている場合に動作するようにするために、ごくわずかな変更しか必要としませんでした。

「いいね!」 3

親カテゴリの色がまだありません


「いいね!」 2

通常のトピック表示で発生しています。
特別な点があるとすれば、コードがイニシャライザ内にあり、post-contents:before ウィジェットにアタッチされたウィジェット内にあることです。プラグインは公開されていませんが、GitHub ユーザー名を PM していただければアクセスを提供できます。または、tar.gz を添付した PM をお送りすることもできます。こちらの方が簡単なかもしれません。プラグインは古く、元々は私が書いたものではありませんが、明らかに間違っていると思われる点も見当たりません。

それはどのように機能するのでしょうか?カテゴリが存在するかしないかの二項対立は理解できます。しかし、特定のカスタムフィールドがないカテゴリに遭遇した場合、カスタムフィールドが存在しないのか、それともまだ完全に読み込まれていないだけなのか、どのように判断すればよいのでしょうか?

つまり、これは決して起こってはならないということです!

「いいね!」 1

それで、この件について @nbianca さん、手伝っていただけますか?

遅延読み込みが有効になっていると、カスタムフィールドがカテゴリオブジェクトから欠落しています。こちらの私の公開プライベート返信プラグインで。

      if ((siteSettings.private_replies_on_selected_categories_only == false) || (topic?.category?.custom_fields?.private_replies_enabled)) {
        return this.currentUser && ((this.currentUser.id == topic_owner_id) || this.currentUser.staff);
      }

そして、それらをどうやって取得すればよいかわかりません。

プリロードされたカテゴリカスタムフィールドにフィールドを追加しています

Site.preloaded_category_custom_fields << 'private_replies_enabled'

内部でチームと話し合っていますが、トピックのカテゴリの事前読み込み方法を再検討する必要があると思います。

「いいね!」 2

AI検索結果でもカテゴリが見つからない箇所がありました。

「いいね!」 2

meta.discourse.org をリロードして「+ New Topic」を選択すると、トピックテンプレートが表示されません。ビデオで実証されているように、最初はすべて正しく機能します。しかし、リロードすると、テンプレートが表示されなくなります。再度コンポーザーを開くと、すべてが期待どおりに再び機能します。

注意:サイドバーに Support がある場合は、リロードする前に削除する必要があります。

「いいね!」 1

ベースとスケーラビリティに満ちている。