Función experimental 'lazy_loaded_categories' habilitada en Meta

:information_source: Este proyecto ha sido puesto en espera por ahora. Podemos retomarlo en el futuro y publicaremos una actualización aquí si es así.

¡Estamos introduciendo una función experimental para ayudar a las comunidades con un gran número de categorías. :rocket:

Durante los últimos meses hemos estado trabajando arduamente para que los sitios de Discourse funcionen mejor para las comunidades con muchas categorías (¡y no solo eso!). Esto permitirá a los administradores crear miles de categorías manteniendo la experiencia de usuario amigable a la que están acostumbrados.

Esta sigue siendo una función experimental y se puede habilitar ajustando la configuración del sitio lazy_loaded_categories_groups. Actualmente está deshabilitada por defecto.

:gear: ¿Cómo funciona esto?

En este momento, todos los datos de las categorías se cargan cuando navegas a una comunidad de Discourse. Esto se llama “carga ansiosa” (eager loading) y no es ideal para sitios con muchas categorías porque significa que se transfiere mucha información antes de la primera renderización, lo que aumenta el tiempo de carga general.

El nuevo método se llama “carga diferida” (lazy loading) y pospondrá la carga de información sobre una categoría hasta que sea realmente necesaria (por ejemplo, al buscar una categoría, navegar o enlazar una, leer un tema o publicación que la mencione, etc.). Menos datos transferidos significan un tiempo de carga más rápido y ¡usuarios más felices! :star:

:discourse: ¿Qué significa esto para ti, como miembro de Meta?

Hemos estado probando exhaustivamente esta función internamente, pero dada la magnitud del trabajo realizado, existe una ligera posibilidad de introducir errores. Si notas algo que no funciona correctamente relacionado con las categorías, infórmanos respondiendo a este tema o abre un tema en Bug.

:people_holding_hands: ¿Qué significa esto para ti o tu comunidad?

Ya sea que estés alojado por nosotros o seas autohospedado, esta función está deshabilitada por defecto y no debería haber cambios visibles.

Sin embargo, si estás considerando expandir tu comunidad para tener muchas categorías, te recomendamos encarecidamente que habilites esta función.

En el futuro, la habilitaremos por defecto y, finalmente, eliminaremos y desaprobaremos el código que realiza la “carga ansiosa” de las categorías.

:technologist: ¿Qué significa esto para los desarrolladores de plugins y temas?

En general, debería haber pocos o ningún cambio necesario para la mayoría de los plugins, siempre y cuando utilicen los componentes de categoría del núcleo o los datos precargados (por ejemplo, consultar solo las categorías que ya son visibles al cargar la página, porque eso significa que ya han sido precargadas).

Pueden aparecer algunos problemas al intentar utilizar información de categorías que aún no se han cargado. El método Category.findByIds continuará devolviendo solo las categorías que ya se han cargado, mientras que Category.asyncFindByIds puede realizar una búsqueda en el servidor si la información aún no se ha cargado.

44 Me gusta

La información de la categoría parece faltar cuando se utiliza uno de los enlaces debajo de una publicación para navegar a un tema en una categoría diferente. Abrí Contributing translations to Discourse en una nueva pestaña y navegué a Switching from Transifex to Crowdin, entonces se ve así:


Después de una recarga, aparece la categoría.

6 Me gusta

Después de publicar mi tema #site-feedback:theme-feedback, faltaba la insignia de categoría para los temas de esa categoría

4 Me gusta

La función de búsqueda dentro del editor no puede determinar si existe una categoría coincidente.

3 Me gusta

¿Está eso también relacionado con las categorías cargadas perezosamente?

2 Me gusta

Sí. He deshabilitado lazy_load_categories por el momento porque estaba rompiendo el plugin de documentación.

5 Me gusta

Hemos vuelto a habilitar este experimento aquí. Lo que se ha corregido desde la última vez que se habilitó:

  • Las categorías en la cabecera se rellenan correctamente, especialmente al navegar de un tema a otro usando enlaces de publicaciones o temas sugeridos.

  • El estilo de las insignias se mostrará correctamente después de crear un nuevo tema en una categoría a la que no se ha navegado antes.

  • El plugin de documentación precarga los datos de las categorías, por lo que la página /docs ahora se renderiza correctamente.

  • Otros errores que se han descubierto a través de una revisión interna.

El único error pendiente es sobre la falta de resultados de búsqueda para ciertas consultas (consultas cortas o consultas que solo contienen palabras vacías).

Queríamos hacer la búsqueda más potente y hemos ampliado el motor de búsqueda de texto completo a las categorías, y este es un efecto secundario no deseado. Creo que tendremos que revertir el algoritmo de búsqueda anterior, pero todavía estamos investigando esto.

7 Me gusta

Faltan las categorías de los moderadores de categorías en /about

Y cuando miro mis borradores, también faltan las categorías.

La página de actividad de un grupo o usuario y las notificaciones en mi perfil como https://meta.discourse.org/my/notifications/responses no cargan categorías

Cuando abres el compositor para iniciar un nuevo tema con un enlace en un mensaje o haciendo clic en nuevo mensaje en tu bandeja de entrada y usando el sobre en la parte superior izquierda del compositor para convertir el borrador en un borrador de nuevo tema, no hay opción para elegir una categoría.

8 Me gusta

Cuando abres /categories, no se muestran todas las subcategorías de Documentation (#documentation:theme-developers desaparece después de recargar hasta que hago clic en Documentation).

Y el autocompletado para buscar categorías no funciona. La mayoría de las categorías no se muestran después de recargar

3 Me gusta

Las categorías también faltan en la lista de temas relacionados.

Y cuando visité los temas para cargar las categorías de la segunda captura de pantalla, noté que en el segundo tema Announcements > Blog, faltaba la categoría debajo del título del tema. Supongo que esto no es importante porque no debería suceder cuando los temas relacionados funcionen.

4 Me gusta

Esto parece estar causando un problema en uno de mis plugins en la versión estable 3.2.1.

Cuando inspecciono Site.current().categories y la carga diferida está habilitada, veo (solo) las categorías que necesito (como la categoría para el tema actual), pero todos los preloaded_category_custom_fields parecen faltar.

Aparecen cuando desactivo la carga diferida (junto con todas las demás categorías).

Por lo tanto, la categoría correcta se precarga pero le faltan sus campos precargados.

1 me gusta

Esto se ha solucionado. :white_check_mark:

Solucionado también. :white_check_mark:

Solucionado también. :white_check_mark:

Los otros problemas se están trabajando actualmente. Muchas gracias por tus comentarios, @Moin.

Depende de cómo se cargaron las categorías. Estoy de acuerdo en que probablemente hay algunas rutas de código que pueden llevar a la carga de datos de categorías parciales. Me comunicaré con el equipo sobre este problema, pero ya que nos estamos moviendo hacia un estado en el que el frontend tendrá que solicitar los datos que necesita antes de acceder a ellos.

¿Es un plugin público? Si es así, puedo echarle un vistazo. En general, los plugins más populares que tenemos requirieron muy pocos cambios para que funcionaran cuando la opción “carga diferida de categorías” está habilitada.

3 Me gusta

Todavía falta el color de la categoría principal


2 Me gusta

Está sucediendo en una vista de tema normal.

Lo único que podría ser especial es que el código está en un inicializador, en un widget que está adjunto al widget post-contents:before. El plugin no es público, pero puedo darte acceso si me envías tu nombre de usuario de Github por mensaje privado. Alternativamente, puedo enviarte un mensaje privado con un tar.gz, lo que podría ser más fácil. El plugin es antiguo y no lo escribí yo originalmente, pero tampoco veo nada que esté obviamente mal.

Entonces, ¿cómo funcionará eso? Puedo entender la situación binaria en la que una categoría está ahí o no está ahí. Pero si me encuentro con una categoría sin un campo personalizado específico, ¿cómo sé si el campo personalizado está ausente o si simplemente aún no se ha cargado por completo?

es decir, ¡esto nunca debería estar sucediendo!

1 me gusta

Entonces, ¿puedes ayudarme con este @nbianca?

Cuando la carga diferida está habilitada, los campos personalizados faltan en el objeto de categoría aquí en mi plugin público de respuestas privadas.

      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);
      }

y no tengo idea de cómo obtenerlos.

Estoy agregando el campo a los campos personalizados de categoría precargados.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

Estoy discutiendo esto internamente con el equipo, pero creo que tendremos que revisar cómo precargamos las categorías para los temas.

2 Me gusta

Encontré otro lugar donde faltan categorías: los resultados de búsqueda de IA.

2 Me gusta

Cuando actualizo meta.discourse.org y selecciono + Nuevo Tema, la plantilla de tema no aparece. Inicialmente, como se demuestra en el video, todo funciona correctamente. Sin embargo, después de recargar, la plantilla está ausente. Una vez que vuelvo a abrir el compositor, todo vuelve a funcionar como se esperaba.

Nota: Si tienes Support en tu barra lateral, debes eliminarlo antes de recargar.

1 me gusta

Basado y con píldoras de escalabilidad.