I caricamenti degli argomenti sono lenti o non avvengono affatto quando hanno molte risposte e l'utente ha un segnalibro al loro interno

Abbiamo avuto un problema ricorrente sul nostro forum Discourse da un po’ di tempo e finalmente siamo riusciti a individuarne la causa e a riprodurlo in modo affidabile.

Ecco i passaggi per riprodurlo:

  1. Avere un argomento con migliaia di risposte

  2. Segnare un post in quell’argomento come preferito (bookmark)

  3. Aprire l’argomento

L’argomento ora impiega molto tempo a caricarsi. In alcuni casi si verifica un timeout e viene visualizzato un errore Nginx (502 Bad Gateway).

Ecco alcuni tempi di caricamento approssimativi dal nostro forum:

  • Per un argomento con circa 1.000 risposte, il tempo di caricamento aggiuntivo è di pochi secondi dopo la creazione del segnalibro. È percettibile ma non costituisce un problema grave.

  • Per un argomento con circa 4.000 risposte, il tempo di caricamento è solitamente di 20-30 secondi e talvolta si verifica un timeout invece del caricamento completo della pagina.

  • Per un argomento con oltre 9.000 risposte, si verifica un timeout nella maggior parte dei casi. In alcuni casi viene caricato, ma solo dopo oltre 30 secondi.

Si noti che questi argomenti vengono caricati senza problemi se non sono presenti segnalibri. Il problema si verifica solo per gli utenti che hanno segnalibri in un determinato argomento e, non appena rimuovono il segnalibro, l’argomento si carica normalmente.

5 Mi Piace

Non sono riuscito a riprodurre il tuo problema con discussioni di 30.000 e 10.000 risposte sul mio forum. :man_shrugging:

4 Mi Piace

Se non è troppo scomodo, potresti provare a impostare un promemoria temporizzato quando crei il segnalibro al passaggio 2 nella descrizione della riproduzione e vedere se qualcosa cambia? È quello che ha finalmente reso il problema riproducibile per me (in particolare impostando un promemoria per “lunedì” nel mio caso).

Questo ha fatto sì che la mia richiesta .json relativa all’ID del post segnalato iniziasse a restituire un 302 dopo 30 secondi di tentativi, come mostrato nell’immagine qui sotto. (si verifica quando faccio clic sul link del segnalibro nel menu del mio profilo).

Per caso, ho anche notato che le query di ricerca hanno iniziato a mostrare un comportamento simile, sebbene rallentando enormemente, una volta cercato qualsiasi cosa in qualsiasi sottoform, inclusi quelli senza alcun post segnalato.

[Immagine oscurata di query di ricerca lente dagli strumenti di sviluppo di Chromium, poiché era consentito solo 1 embed]

In base ad altre esperienze, mi sembra un problema di tipo SQL N+1, ma non sono abbastanza esperto né del codice di Discourse né di Ruby stesso per sapere se forse un modello JSON ciclico o qualcosa di simile si presenterebbe nello stesso modo.

3 Mi Piace

Puoi riprodurre questo, @martin?

2 Mi Piace

Grazie per aver segnalato il problema. Cercherò di riprodurlo e risolverlo questa settimana.

2 Mi Piace

Questo è stato corretto in:

cc @Macaw che ha creato questo argomento correlato Bookmarking a Post on a Large Topic creates Absurd Loading Times

6 Mi Piace