Das Lesezeichen für einen Beitrag zu einem großen Thema führt zu absurden Ladezeiten

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.

4 „Gefällt mir“

Ich bin mir ziemlich sicher, dass ich das @martin bereits in einem anderen Thema bei dir gemeldet habe.

2 „Gefällt mir“

Hmm, ja, das hast du, in diesem hier: Topics load slow or not at all when they have many replies and user has bookmark in them. Entschuldigung, sieht so aus, als hätte ich da versagt; ich werde dieses Problem ganz oben auf meine Liste setzen.

2 „Gefällt mir“

Das ist auch schlimm genug, um ein Backport zu sein, falls es in der stabilen Version existiert.

3 „Gefällt mir“

Ich habe ein Konto auf dem Roblox-Forum erstellt, um mir What are you working on currently? (2020) - #5043 by FLYSLENDY04 - Creations Feedback - Developer Forum | Roblox anzusehen, und ich kann das Problem dort reproduzieren. Ohne Lesezeichen lädt das Thema in ca. 1,3 s, mit einem Lesezeichen dauert es ca. 8 s. Ich habe sogar den 502 Bad Gateway-Fehler erlebt:

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 :man_shrugging:. 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:

Auch dort nichts Verdächtiges…

2 „Gefällt mir“

Könnte es sich um einen Fehler handeln, den wir bereits in einer älteren Version behoben haben? :thinking:

2 „Gefällt mir“

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?

1 „Gefällt mir“

Ich kann das auf BBS reproduzieren

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.

5 „Gefällt mir“

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:

topic.posts.with_deleted.where(post_number: 1).first

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.

3 „Gefällt mir“

Dies wird als Duplikat von geschlossen:

@martin, du kannst dort nach der Klärung einen Beitrag im ursprünglichen Thema verfassen.

4 „Gefällt mir“