Wie beschleunigt man den Empfang von HTTP Response mit jQuery Ajax bei großen Datensätzen?

8

Problem: Python webapp2 + jQuery Ajax performs extrem schlecht beim Empfang von großen Textdaten-Antwort (dauert mehr als 10 Minuten in einem 1,7 MB Payload Roundtrip)

Frage: Was ist der Grund? wie man es verbessert? Könnte ich irgendwelche gut erprobten Techniken verwenden, um den großen Textstamm in kleine Nutzlasten zu teilen, um das Problem des "browserbehangenen" zu vermeiden?

Hintergrund: Ich habe Python-Web-Programmierung mit webapp2 + Google App Engine gelernt. Ich versuche, mit jQuery Ajax eine What-You-Input-Editierzone zu erstellen. Es ist dem stackoverflow-Post-Editor sehr ähnlich: wmd-input vs wmd-preview mit Live-Vorschau-Funktion. (Es zeigt "Entwurf gespeichert" als kurzen Text an. Ein weiteres Beispiel ist die Live-Bearbeitungsfunktion von Google Text & Tabellen).

Mein Beispiel funktioniert folgendermaßen: Ein jQuery-Plug-in für textchange löst Ajax-Einträge aus, die von jeder Eingabetextfläche ausgelöst werden. --- & gt; Python-Back-Ends empfangen den Text und fügen einige Nachrichten hinzu. --- & gt; Zurücksenden die text + messages --- & gt; jQuery verwendet die Serverantwort, um das Vorschau-Textfeld zu aktualisieren (Nun, senden Sie den gesamten Inhalt des empfangenen Textes ist nur für Testzwecke.)

Meine Frontend-Codes:

%Vor%

Meine Backend-Codes:

%Vor%

Testfall und Symptome: Lokaler Server + Nur-Text-Payloads

kopieren und fügen Sie einfachen Text kleiner als 500 KB in Eingabebereich: funktioniert wie ein Charme. ein 1.7MB Text macht jedoch Browser in & gt; 10 Minuten beschäftigt, die völlig reagieren scheint.

Vergleich: Ich füge den gleichen Text zum stackoverflow post Editor ein und die Vorschau erscheint sofort! Ich habe diesmal keine Trinkgeld-Tipps bemerkt. Und es gibt einige Javascript-Codes, die hier die Textlänge beurteilen. Gut. Es besteht die Möglichkeit, dass keine Serverkommunikation stattfindet. Aber es ist ein Workaround, keine Lösung für mein Problem. (Die Google AutoSpeicherfunktion muss einige Techniken verwenden, um das Problem zu lösen!)

Firebug xhr-Monitorergebnisse:

%Vor%

Interessante Dinge:

  1. jQuery Ajax sendet 2 MB anstelle von 1,7 MB reiner Payload an den Server. Was für ein großer Aufwand! Dies könnte an Content-Type: application / x-www-form-urlencoded liegen.
  2. Der Server braucht 1.03s um zu antworten und jQuery benötigt 14 Minuten um die Antwort zu erhalten !!!

Was passiert dahinter? Jede Hilfe wird geschätzt! Ich möchte, dass der Server nach einer Ajax-Anfrage viele Dinge an den Client "pusht", aber dieses Problem macht es unmöglich.

    
Walden Lake 04.11.2011, 04:58
quelle

1 Antwort

1

Erwägen Sie die Verwendung einer Kombination aus HTML5-WebSockets & amp; Worker-API zum asynchronen Senden / Empfangen von Daten vom Server, ohne die Leistung des UI-Threads zu beeinträchtigen.

Ссылка

Ссылка (das Tutorial geht davon aus, dass PHP der Server ist) Seitentechnologie)

Ссылка

Eine andere Option

a) Am mousedown & amp; keyup

%Vor%

b) Am textchange

%Vor%

Sie müssen sehen, ob c1 > c2 , und die Teilzeichenfolge passend erhalten und umgekehrt

Auf diese Weise werden nur "Änderungen" jedes Mal an den Server gesendet - nicht der vollständige Text. Aber wenn Sie 5 MB Inhalt kopieren und einfügen, wird dies keine Verbesserung bringen. Aber für einzelne Zeichenänderungen (wie Tippen, Einfügen kleiner Segmente usw.) sollte das ziemlich gut funktionieren.

    
techfoobar 03.01.2012 08:13
quelle