Dieser Thread hat mich besonders lange genervt. Ich habe mich gefragt, warum das Laden 1–3 Minuten dauert, wenn es überhaupt lädt.
Nachdem jemand dieses Problem in diesem Beitrag bestätigt hat, habe ich mich damit beschäftigt: Ich habe alle Lesezeichen aus dem Thread mit 4.500 Beiträgen entfernt.
Es lud sofort, wie jeder andere Beitrag auch.
Dann habe ich mich gefragt, wie ich das noch testen könnte.
Egal, ob ich den ersten oder den neuesten Beitrag als Lesezeichen markiert habe, es dauerte immer noch eine Weile, zwar nicht Minuten, aber etwa 10 Sekunden.
Der Effekt war bei Threads mit mehr Beiträgen stärker ausgeprägt; ich habe das Gefühl, dass es eine bestimmte Schwelle von etwa 4.000 Beiträgen gibt, ab der die Ladezeiten so langsam werden.
Ich habe das an anderen Threads mit mehr als 4.000 Beiträgen getestet.
Je mehr Lesezeichen ein Thema hat, desto länger dauert das Laden.
Meine Theorie: Je mehr Lesezeichen du in einem Thema mit vielen Beiträgen hast, desto länger dauert das Laden.
Zur Reproduktion: Öffne ein Thema mit sehr vielen Beiträgen und setze ein Lesezeichen. Schade, dass du dich für das Setzen eines Lesezeichens in den verlinkten Threads anmelden musst und dass der Thread mit den meisten Antworten auf dieser Website nur 925 hat.
Falls du noch weitere Informationen benötigst, frag einfach.
Allerdings habe ich lokal ein Thema mit 5000 Beiträgen erstellt und ein Lesezeichen angelegt. Es lädt in der gleichen Zeit, egal ob ich ein Lesezeichen im Thema habe oder nicht . Ich muss weiter suchen… Der Code, der die Lesezeichen eines Benutzers in einem Thema lädt, befindet sich hier:
Und der Code, der ein Lesezeichen für jeden Beitrag findet, ist hier:
Für mich sieht das nicht verrückt oder leistungsintensiv aus. user_post_bookmarks fragt die Datenbank nur einmal ab, da es gememoized ist, also kein N+1-Problem hier. Außerdem ist hier der Code der Topic-Ansicht, um zu prüfen, ob es ein Lesezeichen auf Topic-Ebene gibt:
Ich glaube nicht, dass das der Fall ist. Das Roblox-Forum befindet sich auf der Version Version bump to v2.6.0.beta3 · discourse/discourse@2a268bd · GitHub. Seitdem gab es nur noch zwei commits, die Buchmarken betreffen – beide von mir – und keiner davon hat etwas mit dem Laden oder der Serialisierung von Themen-Buchmarken zu tun.
Ich vermute, es muss irgendeine andere seltsame Zufälligkeit geben?
Bei dieser Abfrage stimmt etwas nicht, was den Planner durcheinanderbringt. Versuche, dir den Ausführungsplan anzusehen und ein wenig damit zu experimentieren.
Meine Vermutung ist, dass einige sehr, sehr kleine Änderungen die Ausführungszeit von fast 4 Sekunden auf 1 Millisekunde reduzieren werden.
Hinweis an alle Leser: Die Aktivierung von MiniProfiler ist hier entscheidend; er kann dir helfen, die problematische Abfrage zu finden.
Dank des Ratschlags von @sam habe ich festgestellt, dass dies auf einen schlechten Abfrageplan zurückzuführen ist, der in dieser Zeile ausgeführt wird:
Das generierte SQL enthält ein LIMIT 1, wodurch der Index index_posts_on_topic_id_and_post_number nie verwendet wird, was zu einer enormen Verzögerung führt. Ich kann dies lokal nicht reproduzieren, da ich kaum Beiträge in der lokalen Datenbank habe; grundsätzlich verschlimmert sich dieses Problem, je mehr Beiträge in Ihrem gesamten Discourse-Forum vorhanden sind. Ich werde in Kürze eine Lösung bereitstellen.