In particolare, questo argomento mi stava dando fastidio da molto tempo. Mi chiedevo: perché ci vogliono da 1 a 3 minuti per caricarlo, se mai decide di caricarsi?
Dopo aver visto qualcuno confermare lo stesso problema in questo post, ho deciso di indagare: ho rimosso tutti i segnalibri dal thread con 4.500 post.
Si è caricato istantaneamente, come qualsiasi altro post.
Mi sono poi chiesto: in quali altri modi potrei testare questa ipotesi?
Indipendentemente dal fatto che avessi segnato il primo o l’ultimo post, il caricamento richiedeva comunque del tempo, anche se non minuti bensì circa 10 secondi.
L’effetto si aggravava nei thread con più post; ho l’impressione che esista una certa soglia intorno ai 4000 post che rende i tempi di caricamento così lenti.
Ho testato questa ipotesi su altri thread con oltre 4000 post.
Più segnalibri ha un argomento, più tempo impiega a caricarsi.
La mia teoria è che più segnalibri hai su un argomento con molti post, più tempo impiega a caricarsi.
Per riprodurre il problema: apri un argomento con moltissimi post e aggiungi un segnalibro. Peccato che per segnare un post nel thread di riferimento sia necessario accedere, e che il thread con il maggior numero di risposte su questo sito abbia solo 925 commenti.
Se hai bisogno di ulteriori informazioni, chiedi pure.
Tuttavia, ho creato un argomento con 5000 post in locale e ho aggiunto un segnalibro: il tempo di caricamento è lo stesso, sia che ci sia un segnalibro nell’argomento o meno . Dovrò continuare a cercare… Il codice che carica i segnalibri di un utente in un argomento è qui:
E il codice che cerca un segnalibro per ogni post è qui:
A mio avviso, questo non sembra né folle né ad alta intensità di risorse. user_post_bookmarks interroga il database solo una volta perché è memorizzato nella cache, quindi non c’è problema N+1. Inoltre, ecco il codice della visualizzazione dell’argomento per verificare se esiste un segnalibro a livello di argomento:
Non credo proprio, il forum di Roblox è sulla versione Version bump to v2.6.0.beta3 · discourse/discourse@2a268bd · GitHub. Da allora ci sono stati solo due commit relativi ai segnalibri che ho fatto io, nessuno dei quali riguarda il caricamento o la serializzazione dei segnalibri degli argomenti.
Forse c’è qualche altra strana coincidenza in gioco, suppongo?
L’SQL generato contiene un LIMIT 1, il che fa sì che l’indice index_posts_on_topic_id_and_post_number non venga mai utilizzato, causando un enorme ritardo. Non riesco a riprodurre il problema localmente perché ho pochissimi post nel database locale; fondamentalmente, più post ci sono nell’intero forum Discourse, più grave diventa questo problema. Stavo per fornire una soluzione a breve.