Was ist der Grund, dass das Rendern desselben HAML beim Ajax viel langsamer ist als das Laden im Browser?

8

Kurze Beschreibung (wir sind in Browser-Debugger Netzwerk-Registerkarte):

%Vor%
  • Funktioniert nur in der Entwicklung

  • ist immer (und browserübergreifend) reproduzierbar

  • Schienen 3.2.22.5

  • Die Zeit ist verloren in HAML (sehr sicher)

Ich arbeite an einem HTML-Editor, um Seiten zum Drucken zu gestalten. Dieser Editor ist - sagen wir - umfassend.

Beim Start muss ich die kompletten Editoren HAML (~ 1000 Zeilen) rendern, das dauert weniger als 5s (außer zuerst nach dem Start der Schienen). Das ist ziemlich schnell.

Die Grundstruktur sieht so aus (Pseudo-HAML, jede Zeile ist ein Partialwert, Zahlen sind ~ Renderzeit). Die Abschnittsanzahl (n) liegt normalerweise bei 10 bis 15

%Vor%

beim Drucken (PDF) sieht es wie

aus %Vor%

So weit, so gut und OK vor allem in einer Entwicklungsumgebung.

Aber wenn ich die Seite im Editor ändern muss und die neue Seite mit AJAX aufrufen muss, um nur das innere HTML zu bekommen

%Vor%

Die Aktion dauert ungefähr 15 Sekunden (!). Die Zeit kommt vom Rendern eines Abschnitts, der jetzt 1 Sekunde statt 100 ms dauert. Wenn ich die gleiche URL in einem neuen Browser Tab öffne, bin ich wieder auf die üblichen 1,5 Sekunden.

Ich habe keine Ahnung warum.

Um es noch seltsamer zu machen:

Ich kann jeden (HTML) Teil des Editors mit AJAX neu laden (re-render), das sieht aus wie

%Vor%

In diesem Fall wird der Editor HAML gerendert, aber nur die Teile, die angefordert werden, und wenn ich (AJAX) anfordere

%Vor%

Ich bin zurück zu ~ 2 Sekunden! obwohl es viel mehr gibt und komplexe Logik ausgeführt wird.

Ich habe keine Ahnung, wo ich weiter suchen soll, aber ich möchte verstehen, was los ist.

Irgendwelche Ideen?

BEARBEITEN : Setzen Sie die Konsolenausgabe

Erklärung: Diese zu Logs habe ich nach mehreren Öffnen in Tab übernommen und XHR aktualisiert und abgespielt

Ich musste einige (identische SQL-) Zeilen löschen wegen 30k limit

Linien, die so aussehen

%Vor%

ist die Ausgabe einer "Timeline" -Methode. Wo Start (in diesem Fall 'Start') nur ein Name ist, ist die Zahl die Zeit (ms) seit dem letzten Aufruf und in Klammern die Zeit bis jetzt. Die optionale "XXXX-Nummer" gibt die Zeit für einen benannten Blockanruf an.

Der Vergleich dieser beiden Dateien zeigt den Unterschied in der Zeile "start with paragroup" und dies ist die erste Zeile in HAML:

%Vor%

während "done prepare_paragroup" mehr oder weniger das letzte ist, bevor "paragroup" gerendert wird

Protokoll der Registerkarte (Aktualisieren)

%Vor%

Protokoll von XHR:

%Vor%     
halfbit 07.08.2017, 19:33
quelle

0 Antworten

Tags und Links