Esta publicación en particular me ha estado molestando durante mucho tiempo. Pregunté: ¿por qué tarda de 1 a 3 minutos en cargar, si es que decide cargar?
Después de ver que alguien apoyaba este problema en esta publicación, decidí investigarlo: eliminé todos los marcadores de la publicación con 4.500 mensajes.
Cargó al instante, como cualquier otra publicación.
Luego me pregunté: ¿qué otras formas podría probar esto?
Independientemente de si marcaba el primer mensaje o el último, aún tardaba un tiempo en cargar, aunque no minutos, sino alrededor de 10 segundos.
El efecto se agravaba en publicaciones con más mensajes; siento que hay un cierto umbral alrededor de los 4.000 mensajes que hace que los tiempos de carga sean tan lentos.
Probé esto en otras publicaciones con más de 4.000 mensajes.
Cuantos más marcadores tenga un tema, más tiempo tardará en cargar.
Mi teoría es que cuanto más marcadores tengas en un tema con muchos mensajes, más tiempo tardará en cargar.
Para reproducir: Abre un tema con muchos, muchos mensajes y marca uno. Es una lástima que la publicación de referencia requiera que inicies sesión para marcar un mensaje, y que la publicación con más respuestas en este sitio web tenga 925.
Si necesito proporcionar más información, no dudes en preguntar.
Sin embargo, creé un tema localmente con 5000 publicaciones y un marcador, y carga en el mismo tiempo tanto si tengo un marcador en el tema como si no . Tendré que seguir investigando… El código que carga los marcadores de un usuario en un tema está aquí:
Y el código que busca un marcador para cada publicación está aquí:
Para mí, esto no parece exagerado ni intensivo en rendimiento. user_post_bookmarks solo consultará la base de datos una vez porque está memoizado, así que no hay problema N+1 aquí. Además, aquí está el código de la vista del tema para verificar si hay un marcador a nivel de tema:
No lo creo, el foro de Roblox está en la versión Version bump to v2.6.0.beta3 · discourse/discourse@2a268bd · GitHub. Desde entonces, solo ha habido dos commits relacionados con marcadores que hice yo, y ninguno de ellos afecta la carga o serialización de marcadores de temas.
Supongo que debe haber alguna otra coincidencia extraña en juego, ¿no?
El SQL generado incluye un LIMIT 1, lo que hace que el índice index_posts_on_topic_id_and_post_number nunca se utilice, provocando un retraso considerable. No puedo reproducir esto localmente porque apenas tengo publicaciones en la base de datos local; básicamente, cuanto más publicaciones tenga todo tu foro Discourse, peor se vuelve este problema. Pronto tendré una solución lista.