it-swarm.com.de

Ist es eine gute Idee, mehrere HTTP-Anforderungen zusammenzuführen, um Bandbreite zu sparen?

Ich bereite eine einseitige Anwendung vor, die manchmal über eine langsame mobile Verbindung verwendet wird. Einige seiner Teile sind sehr umfangreich in Bezug auf API-Anforderungen (Abrufen von zehn verschiedenen Ressourcen für eine neue Bildschirmanzeige).

Ist es nun eine gute Idee, diese Dienste zu einem zusammenzuführen, der alle erforderlichen Daten bereitstellt, jedoch nicht so "rein" in Bezug auf die Prinzipien von REST?) Ist mit erheblichen Leistungssteigerungen zu rechnen?

16

Einer der Vorteile von REST ist die Möglichkeit, die Anforderungen über herkömmliche http-Caches zwischenzuspeichern (vorausgesetzt, es handelt sich um zwischenspeicherbare Anforderungen).

Wenn Sie einzelne, größere, weniger häufig verwendete und möglicherweise unterschiedliche Anforderungen haben (ich werde Elemente abrufen a,b,c,d diesmal und Gegenstände a,b,d,e nächstes Mal) erhöhen Sie die Wahrscheinlichkeit, dass die Anforderung ein Cache-Fehler ist, und werden von einem Cache abgelaufen, der sich möglicherweise irgendwo zwischen Ihnen und der Quelle befindet.

In Anbetracht der beiden oben genannten Anforderungssätze kann die zweite Anforderung eine Trefferquote von 75% aufweisen und wesentlich schneller sein, wenn nur e abgerufen wird und nicht alle vier Dinge.

Beachten Sie, dass dies für Personen, die es als die Person verwenden, die den ersten Satz von Cache-Miss-Anforderungen ausführt, möglicherweise nicht sofort ersichtlich ist.

Dies bedeutet nicht, dass es ideal für eine mobile Netzwerkverbindung ist, bei der es weniger wahrscheinlich ist, dass nicht lokale Cache-Treffer erzielt werden. Aber für Hot Spots oder andere WLAN-Situationen könnten die Cache-Treffer viel nützlicher sein.

Vieles davon hängt wiederum davon ab, wie Ihre Anwendung funktioniert. Fragt es beim Start nach all diesen Daten? oder sprechen wir von einem Seitenladen, bei dem die Erwartungen an die Antwortzeit unterschiedlich sind?

Am besten testen Sie dies, um festzustellen, wie sich Ihre Anwendung in verschiedenen Situationen entwickelt. Stellen Sie eine Situation ein, in der Sie Ihr Mobilgerät an ein lokales WLAN-Netzwerk gebunden haben, das Sie können überwachen (das ist nur der erste Treffer bei Google) und simuliert eine schlechte Internetverbindung um zu sehen, wie die Dinge tatsächlich funktionieren (oder nicht) und welche die beste Leistung hat.

18
user40980

Ihre Intuition ist etwas korrekt - im Großen und Ganzen ist es sicherlich vorzuziehen, weniger Anfragen zu stellen. klobige APIs sind in der Regel besser. Besonders bei fleckiger Konnektivität, bei der Sie sehen können, dass einige Arbeiten funktionieren und andere keine albtraumhaften Fallback-Szenarien erstellen, da sich nichts auf irgendetwas verlassen kann.

Es gibt eine große Einschränkung: Sie können viel zu klobig werden und Ihre Anrufe und Antworten werden aufgebläht. Zum Beispiel kann es sinnvoll sein, einen großen Aufruf zu haben, wenn Sie zum ersten Mal auf eine Seite klicken und dann Aktualisierungen in kleineren Schritten einströmen lassen, anstatt jedes Mal, wenn Sie Daten wünschen, eine Aktualisierung einer großen Seite zu erzwingen.

Oder Sie möchten es aller Wahrscheinlichkeit nach in beide Richtungen tun.

8
Wyatt Barnett

Check out dieser Dropbox Tech Blog Artikel .

Dort beschreiben sie ausführlich, warum und wie sie genau die Lösung implementiert haben, die Sie zum Abrufen der Miniaturansichten für alle Ihre Bilder vorgeschlagen haben. Es sollte gesagt werden, dass sie die Leistung messen, um zu sehen, ob sich die Mühe lohnt, und anscheinend ist es das auch.

Kurze Zusammenfassung:

Die Dropbox-Website muss Hunderte von Miniaturansichten laden. Aufgrund von Einschränkungen in einigen Browsern werden nicht alle Miniaturansichten parallel geladen (die Anforderungen werden in die Warteschlange gestellt). Sie wollten SPDY verwenden, konnten dies jedoch nicht, da Teile ihres Systems dies noch nicht unterstützen. Am Ende verwendeten sie Stapelanforderungen über HTTP, die mehrere Miniaturansichten pro Antwort in komprimierter Form zurückgeben. Die Verbesserung der Ladezeit der Seite betrug insgesamt 40%.

5
jmiserez

Kurz gesagt: Ihr Ansatz ist etwas korrekt und könnte von einem Wrapper-Service profitieren.

Dieser Dienst kombiniert vorhandene Einzelaufrufe zu einer dienstseitigen Methode. Kombinieren Sie dazu Anrufe vom Client zur Serviceseite und nutzen Sie alle einzelnen, atomaren und erholsamen Anrufe, die Sie wahrscheinlich bereits eingerichtet haben.

Somit würden Sie weiterhin von REST als Möglichkeit zum Zwischenspeichern der Anforderungen profitieren.

Am Endpunkt läuft jedoch alles auf die Leistung der Service-/Serverinfrastruktur und die Clientumgebung hinaus, die sie verbrauchen sollte.

3
Yusubov