Metaで実験的な「lazy_loaded_categories」機能が有効化

:information_source: このプロジェクトは当面の間保留されています。将来再検討する可能性があり、その場合はここに更新情報を投稿します。

大規模なカテゴリ数を扱うコミュニティを支援するための実験的機能をご紹介します。:rocket:

過去数ヶ月、Discourse サイトが多数のカテゴリ(それだけでなく)を持つコミュニティにとってより良く動作するように努めてきました。これにより、管理者は皆さんが慣れ親しんだ親しみやすい UX を維持したまま、数千ものカテゴリを作成できるようになります。

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

:gear: これはどのように動作しますか?

現在、Discourse コミュニティに移動すると、すべてのカテゴリデータが読み込まれます。これは「イージーローディング」と呼ばれ、カテゴリ数が非常に多いサイトでは理想的ではありません。なぜなら、最初の描画前に大量の情報が転送されるため、全体の読み込み時間が長くなるからです。

新しい方法は「レイジーローディング」と呼ばれ、カテゴリに関する情報の読み込みを本当に必要な時まで延期します(例えば、カテゴリを検索するとき、カテゴリに移動またはリンクするとき、カテゴリに言及されているトピックや投稿を読むときなど)。転送されるデータが減ることで、読み込み時間が短縮され、ユーザーが満足します! :star:

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

私たちはこの機能について内部で徹底的にテストしてきましたが、実施した作業の規模を考慮すると、バグを導入するわずかな可能性はあります。カテゴリに関連する不具合にお気づきの場合は、このトピックへの返信または Contribute > Bug トピックの作成によりお知らせください。

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

当社がホスティングしている場合でも、セルフホスティングしている場合でも、この機能はデフォルトで無効になっており、目に見える変更はないはずです。

ただし、コミュニティを拡張して多数のカテゴリを持たせたいと考えている場合は、この機能を有効にすることを強く推奨します。

将来的には、この機能をデフォルトで有効にし、最終的にはカテゴリを「イージーロード」するコードを非推奨とし、削除する予定です。

: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

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