Recurso experimental 'lazy_loaded_categories' ativado no Meta

:information_source: Este projeto foi suspenso por enquanto. Podemos revisitá-lo no futuro e publicaremos uma atualização aqui, se for o caso.

Estamos introduzindo um recurso experimental para ajudar comunidades com um grande número de categorias. :rocket:

Nos últimos meses, trabalhamos arduamente para fazer com que os sites do Discourse funcionassem melhor para comunidades com muitas categorias (e não apenas isso!). Isso permitirá que os administradores criem milhares de categorias, mantendo a experiência do usuário amigável com a qual você está familiarizado.

Este ainda é um recurso experimental e pode ser ativado ajustando a configuração do site lazy_loaded_categories_groups. Atualmente, ele está desativado por padrão.

:gear: Como isso funciona?

No momento, todos os dados das categorias são carregados quando você navega para uma comunidade do Discourse. Isso é chamado de “carregamento ansioso” (eager loading) e não é ideal para sites com muitas categorias, pois significa que muitas informações são transferidas antes da primeira renderização, o que aumenta o tempo total de carregamento.

O novo método é chamado de “carregamento preguiçoso” (lazy loading) e adiará o carregamento de informações sobre uma categoria até que seja realmente necessário (por exemplo, ao pesquisar uma categoria, navegar ou vincular uma, ler um tópico ou postagem que a mencione, etc.). Menos dados transferidos significam tempo de carregamento mais rápido e usuários mais felizes! :star:

:discourse: O que isso significa para você, como membro do Meta?

Testamos este recurso extensivamente internamente, mas dada a extensão do trabalho realizado, há uma pequena chance de introduzir bugs. Se você notar algo com mau funcionamento relacionado a categorias, informe-nos em uma resposta a este tópico ou abra um tópico em Bug.

:people_holding_hands: O que isso significa para você ou sua comunidade?

Seja você hospedado por nós ou auto-hospedado, este recurso está desativado por padrão e não deve haver alterações visíveis.

No entanto, se você está pensando em expandir sua comunidade para ter muitas categorias, encorajamos fortemente que você ative este recurso.

No futuro, nós o ativaremos por padrão e, eventualmente, desativaremos e removeremos o código que faz o carregamento ansioso (eager loads) das categorias.

:technologist: O que isso significa para desenvolvedores de plugins e temas?

Em geral, deve haver pouca ou nenhuma alteração necessária para a maioria dos plugins, desde que eles usem os componentes de categoria do core ou dados pré-carregados (por exemplo, consultando apenas as categorias que já estão visíveis ao carregar a página, pois isso significa que elas já foram pré-carregadas).

Alguns problemas podem surgir ao tentar usar informações de categorias que ainda não foram carregadas. O método Category.findByIds continuará a retornar apenas as categorias que já foram carregadas, enquanto Category.asyncFindByIds pode realizar uma consulta no servidor se a informação ainda não tiver sido carregada.

44 curtidas

As informações da categoria parecem estar ausentes quando você usa um dos links abaixo de uma postagem para navegar para um tópico em uma categoria diferente. Abri Contributing translations to Discourse em uma nova aba e naveguei para Switching from Transifex to Crowdin, então fica assim:


Após uma recarga, a categoria aparece.

6 curtidas

Depois que postei meu tópico #site-feedback:theme-feedback, o selo da categoria estava faltando para os tópicos dessa categoria

4 curtidas

A função de pesquisa dentro do compositor não consegue determinar se há uma categoria correspondente.

3 curtidas

Isso também está relacionado às categorias carregadas preguiçosamente?

2 curtidas

Sim. Desativei o lazy_load_categories por enquanto porque ele estava quebrando o plugin de documentação.

5 curtidas

Reativamos este experimento aqui. O que foi corrigido desde que foi ativado pela última vez:

  • As categorias no cabeçalho são preenchidas corretamente, especialmente ao navegar de um tópico para outro usando links de posts ou tópicos sugeridos

  • A estilização de badges será exibida corretamente após a criação de um novo tópico em uma categoria que não foi acessada anteriormente

  • O plugin Docs pré-carrega os dados das categorias, portanto, a página /docs agora é renderizada corretamente

  • Outros bugs que foram descobertos através de revisão interna

O único bug pendente é sobre os resultados de pesquisa ausentes para certas consultas (consultas curtas ou consultas que contêm apenas stop words).

Queríamos tornar a pesquisa mais poderosa e estendemos o mecanismo de busca de texto completo para as categorias, e este é um efeito colateral indesejado. Acho que teremos que reverter o algoritmo de pesquisa anterior, mas ainda estamos investigando isso.

7 curtidas

As categorias de moderadores de categoria em /about estão faltando

E quando olho meus rascunhos, as categorias também estão faltando.

A página de atividade de um grupo ou usuário e as notificações no meu perfil, como https://meta.discourse.org/my/notifications/responses, não carregam categorias.

Quando você abre o composer para iniciar um novo tópico com um link em uma mensagem ou clicando em nova mensagem na sua caixa de entrada e usando o envelope no canto superior esquerdo do composer para transformar o rascunho em um novo rascunho de tópico, não há opção para escolher uma categoria.

8 curtidas

Ao abrir /categories, nem todas as subcategorias de Documentation são exibidas (#documentation:theme-developers desaparece após recarregar até que eu clique em Documentation).

E a autocompletar para pesquisar categorias não funciona. A maioria das categorias não é exibida após recarregar

3 curtidas

As categorias também estão faltando na lista de tópicos relacionados.

E quando visitei os tópicos para carregar as categorias para a segunda captura de tela, notei que no segundo tópico Announcements > Blog, a categoria abaixo do título do tópico estava faltando. Presumo que isso não seja importante porque não deveria acontecer quando os tópicos relacionados funcionarem.

4 curtidas

Isso parece estar causando um problema em um dos meus plugins no 3.2.1 stable.

Quando inspeciono Site.current().categories e o carregamento preguiçoso está ativado, vejo (apenas) as categorias que preciso (como a categoria para o tópico atual), mas todos os preloaded_category_custom_fields parecem estar faltando.

Eles aparecem quando desativo o carregamento preguiçoso (junto com todas as outras categorias).

Portanto, a categoria correta está sendo pré-carregada, mas faltam seus campos pré-carregados.

1 curtida

Isso foi corrigido. :white_check_mark:

Corrigido também. :white_check_mark:

Corrigido também. :white_check_mark:

Os outros problemas estão sendo trabalhados no momento. Muito obrigado pelo seu feedback, @Moin.

Depende de como as categorias foram carregadas. Concordo que provavelmente existem alguns caminhos de código que podem levar ao carregamento de dados parciais de categorias. Comunicarei com a equipe sobre este problema, mas como estamos nos movendo em direção a um estado onde o frontend terá que solicitar os dados de que precisa antes de acessá-los.

É um plugin público? Se sim, posso dar uma olhada. Em geral, os plugins mais populares que temos exigiram pouquíssimas alterações para fazê-los funcionar quando o “carregamento preguiçoso de categorias” está habilitado.

3 curtidas

A cor da categoria pai ainda está faltando


2 curtidas

Está acontecendo em uma visualização de tópico regular.

A única coisa que pode ser especial é que o código está em um inicializador, em um widget que está anexado ao widget post-contents:before. O plugin não é público, mas posso lhe dar acesso se você me enviar seu nome de usuário do Github por mensagem privada. Alternativamente, posso enviar-lhe um PM com um tar.gz, o que pode ser mais fácil. O plugin é antigo e não foi escrito originalmente por mim, mas não vejo nada que esteja obviamente errado.

Então, como isso funcionará? Posso entender a situação binária onde uma categoria está lá ou onde ela não está lá. Mas se eu encontrar uma categoria sem um campo personalizado específico, como saberei se o campo personalizado está ausente ou se ele ainda não foi totalmente carregado?

ou seja, isso nunca deveria estar acontecendo!

1 curtida

Então você pode me ajudar com este, @nbianca?

Quando o carregamento lento está ativado, os campos personalizados estão faltando no objeto de categoria aqui no meu plugin público de respostas 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);
      }

E eu não tenho ideia de como obtê-los.

Estou adicionando o campo aos campos personalizados de categoria pré-carregados.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

Estou discutindo isso internamente com a equipe, mas acho que teremos que revisar como pré-carregamos as categorias para os tópicos.

2 curtidas

Encontrei outro local onde as categorias estão faltando: os resultados da pesquisa de IA.

2 curtidas

Ao atualizar meta.discourse.org e selecionar + Novo Tópico, o modelo de tópico falha ao aparecer. Inicialmente, como demonstrado no vídeo, tudo funciona corretamente. No entanto, após recarregar, o modelo está ausente. Assim que abro o compositor novamente, tudo volta a funcionar como esperado.

Observação: Se você tiver Support na sua barra lateral, deverá removê-la antes de recarregar.

1 curtida

Baseado e escalável.