Würde die Verwendung von AJAX die Serverleistung erheblich verbessern?

10

AJAX verbessert eindeutig die Benutzeroberfläche, verringert dies jedoch auch die Serverlast? Sie würden denken, dass dies der Fall ist, da nicht jedes Mal die gesamte Seite bereitgestellt werden muss, aber möglicherweise gibt es andere Variablen, die ich nicht in Betracht ziehe.

Codierer
quelle

Antworten:

14

Es hängt davon ab, was Sie tun und wie Sie es tun.

  • Wenn Sie das Laden ganzer Seiten durch AJAX-Anforderungen ersetzen (dh nur AJAX-Aufrufe ausführen, wenn ein Benutzer auf das Laden ganzer Seiten klickt), verringert AJAX die Serverlast, da Sie (vermutlich) weniger verarbeiten und weniger zurückgeben Daten.

  • Wenn Sie dagegen den AJAX-Typ für die automatische Aktualisierung hinzufügen, der den Server alle paar Sekunden abfragt, kann dies die Auslastung je nach Benutzer erhöhen (die Serverlast wird möglicherweise nicht erhöht, wenn der Benutzer weiterhin F5 drückt, um die Aktualisierung trotzdem manuell durchzuführen) Die meisten Leute machen das im Allgemeinen stundenlang nicht.

  • Eine weitere AJAX-Optimierung besteht darin, beim Scrollen nur mehr Daten zu laden. In diesem Fall ist die Verarbeitung verschwendet, wenn der Benutzer nicht ganz nach unten scrollt.

Natürlich kann die tatsächliche Implementierung die Ergebnisse in beide Richtungen verzerren. Dies sind typische Ergebnisse unter der Annahme einigermaßen guter Implementierungen.

Davy8
quelle
Die eigentliche Frage hier ist, was sich ändert, wenn Sie zu einer AJAX-Vorgehensweise wechseln. Können Sie die zuvor verschwendete Arbeit beseitigen, indem Sie zu AJAX wechseln oder sie lediglich in kleinere Teile zerlegen? (und zusätzlichen Aufwand in den Prozess)
SplinterReality
3

Natürlich dient es dazu, die Serverlast zu verringern. Schauen Sie sich diese Präsentation @ jsconf'09 an - wie Facebook Ajax dazu verwendet hat.

Ajax ist asynchron. Serverkommunikation - und das können Sie auf vielfältige Weise nutzen. Die Leute verwenden es zum Laden von einfachem JSON in das Echtzeit-Web und für alles dazwischen.

Denken Sie daran - die eigentliche Herausforderung ist das Gleichgewicht zwischen Client und Server. Bemühen Sie sich, jede Partei dazu zu bringen, ihre Arbeit so zu erledigen, dass das System optimiert wird und Sie offensichtliche Vorteile von wahrgenommener Reaktionsfähigkeit und echter Geschwindigkeit erhalten.

Baumkodierer
quelle
3

Es gibt andere Faktoren, die Sie nicht berücksichtigen - in den meisten Fällen erhöht AJAX die Serverlast. In einem typischen Nicht-Ajax-Szenario lädt ein Benutzer alle paar Sekunden oder Minuten eine große Seite. Ja, diese einzelne Seite ist etwas mehr Arbeit für den Server, aber zwischen den Anforderungen zum Wiederherstellen und Bearbeiten anderer Anforderungen bleibt genügend Zeit. In einem AJAXified-Szenario besteht das Laden einer einzelnen Seite jetzt aus Dutzenden kleiner Treffer, die den Server ständig hämmern und auf Antworten warten.

Es ist ein bisschen wie der Tod durch 1000 Schnitte - keine der Anfragen ist an und für sich so groß, aber das Gesamtgewicht ist ein Killer. Vor allem, wenn Sie bedenken, dass diese kleinen Anfragen genauso teuer sind wie eine ganzseitige Anfrage. In beiden Fällen durchlaufen Sie wahrscheinlich eine gesamte Webanwendungspipeline, treffen auf eine Datenbank und warten auf eine Antwort, während Sie auf einer wertvollen HTTP-Verbindung sitzen.

Hier ist ein Beispiel dafür, wie Ajax auf dem Server sehr schnell hässlich werden kann. Nehmen wir ein typisches "Executive Dashboard" mit 4 Steckplätzen für Widgets. Angenommen, der CEO mag einen vollständigen Verkaufsbericht auf der rechten Seite, eine Top-10-Liste der Verdiener in der Mitte und einen Aktienkursbericht des Unternehmens auf der rechten Seite. Nehmen wir an, wir werden dies über einfache Ajax-Remote-Anforderungen tun. Ohne Berücksichtigung von Stylesheets, Bildern und anderen Elementen erfordert Ihre Seite jetzt 4 HTTP-Roundtrips (Hauptseite, jeder Dashboard-Bericht) gegen den Server. Für jede dieser Funktionen ist ein vollständiger Webstack erforderlich - Sie werden Datenbanken abrufen und HTML mithilfe Ihres Webframeworks rendern, oder? Multiplizieren Sie nun den einzelnen CEO mit 2000 Remotebenutzern, von denen einige nur wenige Verbindungen haben.

Umgekehrt könnten Sie eine einzelne serverseitige Seite haben, die ein HTML-Skelett ausführt und zurückgibt, sowie die Daten (in In-Page-JSON enthalten), um die Berichte zu rendern. Einzelne, größere Verbindung, aber insgesamt weniger Probleme auf dem Webserver, da Sie nicht 4 Anfragen bearbeiten und 4 Pipelines usw. hochfahren.

Wyatt Barnett
quelle
1
Können Sie ein Beispiel für eine kleine Anfrage geben, die Sie in AJAX benötigen würden und die Sie sonst nicht benötigen würden?
Schockieren
1
Sicher - jemals bemerkt, wie es Ihnen auf dieser Site sagen kann, ob jemand bereits eine Frage beantwortet hat? Dies wird über eine kleine Ajax-Anfrage erreicht. . .
Wyatt Barnett
@ WyattBarnett AJAX bedeutet nicht unbedingt Polling. Sie können einfach das Laden ganzer Seiten durch das Laden von Seiten ersetzen. In vielen Fällen kann es die Serverlast erhöhen, aber ich denke nicht, dass dies in "den meisten Fällen" der Fall ist.
Davy8
hm, nun, dieses Beispiel scheint mir eher etwas zu sein, das Sie in AJAX tun können, als Sie es sonst nicht können, als etwas, das mehr Serveranforderungen erfordert als sonst. Ich nehme an, das OP war unklar, ob er "mehr Leistung, wenn er genau dasselbe tut" oder "mehr Leistung, wenn er AJAX voll ausnutzt"
meinte
1
Beachten Sie, dass Polling / Long Polling nur eine Teilmenge von AJAX ist (wie hier angegeben), auch als „Komet“ bezeichnet . Websockets, die "echtes" abruffreies Push oder serverseitiges (vom Server initiiertes) AJAX ermöglichen, reduzieren die für diese Art von Funktion erforderliche Ressourcenverschwendung erheblich.
Alan H.
2

Wenn Sie AJAX verwenden, um die Arbeit zu ersetzen, die der Server sonst ausführen würde, verbessert dies die Serverleistung. Möglicherweise haben Sie die Dinge jedoch so entworfen, dass der Server immer noch genauso viel tut, und jetzt ist alles, was mit AJAX passiert, zusätzlich zu dem, was der Server bereits getan hat.

Meist geht es um UI-Sachen, da Sie auf der Clientseite nichts anderes tun sollten. Grundsätzlich wird alles, was der Server zur Unterstützung der Benutzeroberfläche unternahm (z. B. das Neuladen der Seite mit einem anderen Layout als Reaktion auf Benutzereingaben), stattdessen mit JavaScript ausgeführt.

jhocking
quelle
0

Wenn das HTML-Rendering einen großen Teil des Leistungsprofils Ihres Anwendungsservers ausmacht, kann das Verschieben des HTML-Renderings auf den Client einen Leistungsgewinn auf dem Anwendungsserver bedeuten.

Wenn das HTML-Rendering jedoch nur einen kleinen Teil des Leistungsprofils Ihres Anwendungsservers ausmacht, bedeuten mehr Anforderungen in der Regel mehr Durchläufe durch den Stapel, mehr Abfragen, mehr von allem auf dem Anwendungsserver und einen Leistungsverlust.

Die einzige Möglichkeit, dies in Ihrem speziellen Fall zu wissen, besteht natürlich darin, es auszuprobieren.

Yfeldblum
quelle
1
Ich habe Probleme, mir Beispiele vorzustellen, bei denen die Verwendung von AJAX mehr Anforderungen verursachen würde, als dasselbe ohne AJAX zu tun. Kannst du ein Beispiel geben?
Schockieren
1
HTML wird immer auf der Clientseite gerendert.
Jonas
1
Vermutlich hat er falsch geschrieben und "Manipulation" und nicht "Rendern"
gemeint
Ausgehend von Ansicht / Vorlage, Kombination mit Variablen und Rendern von Roh-HTML daraus.
Yfeldblum
AJAX würde mehr Anfragen verursachen als dasselbe ohne AJAX zu tun, in Fällen wie: Ihr Hauptlayout hat "Löcher", wird aber mit diesen Löchern an den Browser geliefert, und diese Löcher werden mit AJAX "gefüllt". Siehe zB Facebook.
Yfeldblum
0

Sie müssen überlegen, wie Sie Ihre Lösung am besten implementieren können. Eine einfache nicht dynamische Form benötigt kein Ajax und das Hinzufügen kann tatsächlich die Leistung beeinträchtigen. Wenn Ihr Problem schlechte Abfragen sind, führt die gesamte Ajax-Optimierung der Welt nicht zu einer akzeptablen Leistungssteigerung.

Wenn Ihr Server überlastet ist, müssen Sie herausfinden, warum.

Wenn Sie viele Treffer erhalten, wird Ajax dieses Problem nicht beheben. Sie benötigen mehr Kapazität. Durch Hinzufügen von Ajax wird nur die Anzahl der Anforderungen erhöht, die Ihr Server verarbeiten muss.

Wenn Sie eine komplizierte Seite haben, sollten Sie prüfen, ob Sie clientseitig etwas tun können, um die Belastung Ihres Servers zu verringern. Wenn Ihre Seite dynamisch ist, aber wirklich ein begrenztes Datenpaket-Caching aufweist, kann sich die Anpassung auf der Clientseite besser auszahlen.

Und manchmal wird Ajax helfen. Wenn Sie komplexe Formulare mit dynamischen Daten haben, gewinnt Ajax den Tag. Wenn Ihre Abfragen jedoch kompliziert sind und die Ausführung lange dauert, kann Ajax Ihr Problem immer noch nicht lösen.

SoylentGray
quelle