Verwalten der Daten mit einer Client-Cache mit Ajax

Verwalten der Daten mit einer Client-CacheDie Anwendungs-Performance ist abhängig von der Caches, die auf dem Client-und Server-Seiten durchgeführt werden. Wenn die Caches schlecht wahrnehmen kann, wird die Anwendung nicht gut laufen. Wenn die Caches wirksam sind, wird die Anwendung als wirksam erwiesen. Zu einem großen Teil, was ich gerade gesagt habe ist klar, aber ich möchte betonen, dass, egal wie gut geschrieben die übrigen Teile des Codes sind, wenn Sie ein schlechtes Caching-Strategie haben, wird die Anwendung schlecht durchführen. Vier Arten von Caching-Strategie umgesetzt werden können:

  

HTTP-Validierung: Eine Form von Caching, wenn der Client-und Browser-Aktie Informationen über eine URL mit einem Handshake-Protokoll. Diese Form des "Caching verringert nicht das Gespräch zu begegnen, aber es tut und wie viele Daten zu reduzieren, ist in der Konversation gesendet. Verwenden Sie diese Methode, wenn Sie Daten, die regelmäßig verändert und Ihre Netzwerkverbindung zwischen Client und Server ist der Breitband-Qualität haben.

Client-Seite nur: Eine Form des "Caching", wo nur der Client-Seite speichert die Informationen. In der Regel verwenden Sie diese Vorgehensweise, wenn der Server nicht unterstützt Caching, oder wenn die Hin-und Rückfahrt zwischen dem Client und Server erfordert zu viel Zeit.

Server-Seite nur: Eine Form des "Caching", wo nur der Server-Seite speichert die Informationen. Der Kunde wird ständig Abfrage des Servers für die entsprechenden Informationen. Diese Form der Cache ist in der Regel ineffizient, und es sollte nur verwendet werden, wenn das physische Netzwerk Abstand zwischen dem Client und Server minimal ist (z. B. Browser und Server auf demselben Computer).

Client-und Server-Seite: Eine generalisierte ideale Weg, Caching bei denen sowohl der Server und der Client-Cache-Informationen. In jedem dieser Caching-Strategien, Sie über die verfügbare Bandbreite, welche Art von Daten, die Sie erhalten, denken müssen, und wie weit der Kunde von der Server. Eine weitere Sorge ist die Proxys Sitzung zwischen dem Client und Server, kann die Information im Cache.

Die Implementierung einer einzigen Anfrage Client-CacheEine effektive und effiziente Cache nicht ändern würde, das Programmiermodell des Kunden. Daher ist eine Client-Cache ist am besten in der Asynchron-Klasse implementiert. Dann, wenn einige Code verwendet Asynchron, ist der Cache geprüft und verifiziert, ob die Antwort bereits zur Verfügung. Wenn die Antwort zur Verfügung steht, wird der Code empfängt die Antwort sofort. Das folgende Beispiel hat Haken zu nutzen, einen Cache zu machen.

 Quelle: / client / scripts / Jaxson / Common.js Funktion Asynchronous_call (request) (var instance = this; if (! this.settings) (throw new Error ( "Einstellungen" ist nicht definiert ");) if (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (throw new Error ( "Zur Zeit aktive Anfrage kann nicht fortgesetzt werden");) this.xmlhttp.open (request.action, request.url, true, this.settings.username diese . settings.password); globals.info ( "Opening Anfrage" + request.url); if (request.headers) (for (defHeader in request.headers) (this.xmlhttp.setRequestHeader (defHeader, request.headers [defHeader] );)) if (this.settings.headers) (for (defHeader in this.settings.headers) (this.xmlhttp.setRequestHeader (defHeader, this.settings.headers [defHeader]);)) this.settings.url = request.url; if (this.cache.processAndBreakBeforeRequest (this.xmlhttp, Anfrage, this.settings) == true) ( globals.info ( "Von Daten aus dem Cache für die Anforderung" + instance.settings.url); return; )this.xmlhttp.onreadystatechange = function () (if (instance.xmlhttp.readyState == 4) (globals.info ( "Empfangene Daten für die Anfrage" + instance.settings.url); if (instance.cache.processAndBreakAfterRequest (instance.xmlhttp, Anfrage, instance.settings) == true) ( return; )try (instance.settings.onComplete (instance.xmlhttp);) catch (e) (globals.errorHandler (e);))) try (this.xmlhttp.send (request.data);) catch (e) (Globals. errorHandler (e);))

Die Asynchronous Code ist sehr ähnlich zu dem, was das in Artikel 4. Die neuen Teile sind fett gedruckt. Hooking einen Cache in Asynchronous ist einfach: Sie müssen den Antrag erfassen, bevor sie gesendet wird, und dann fangen die Antwort, wenn es ankommt. Asynchronous nicht implementiert einen Cache, weil es viele Möglichkeiten, Code, um einen Cache. Die klügste Strategie, und den von Asynchronous gewählt, ist es, die Anrufe an eine andere Methode zu delegieren. Im Falle der Aufnahme eines Antrags ist die this.cache.processAndBreakBeforeRequest-Methode aufgerufen. Das XMLHttpRequest, Anfrage und Einstellungen des Asynchron-Instanz an die Methode übergeben werden. Wenn die Methode true zurück, dann Asynchronous_call kehrt sofort zurück. Die sofortige Rückkehr zeigt in der Regel, dass die Daten im Cache gespeichert ist, aber es kann auch dazu verwendet werden, um eine Anfrage zu stoppen.

Im Falle der Aufnahme eine Antwort, in der Umsetzung der onreadystatechange ist eine Anfrage an den instance.cache.processAndBreakAfterRequest Methode. Drei Parameter an die Methode übergeben: ein XMLHttpRequest Beispiel Anfrage, und Einstellungen. Auf der Grundlage dieser drei Parameter kann der Cache des Response-Daten speichern, um zu einem späteren Zeitpunkt abgerufen werden. Wenn die processAndBreakAfterRequest Methode gibt true zurück, dann ist die Antwort Daten werden nicht an die onComplete Methode geschickt. Allgemein gesprochen, würden Sie dies nicht tun, aber es ist notwendig, wenn Sie einen HTTP-Cache Validierung umsetzen.

Die Art des Cache, die Sie zur Umsetzung hängt von Ihren Bedürfnissen. Es kann entweder ein Client-seitiges Cache oder einen HTTP-Cache-Validierung. Im Zusammenhang mit den Börsenticker Anwendung einer einzigen Anfrage Client-Cache erstellt wird. Die einzigen Antrag Client-Cache Cache wird jede Anfrage einmal und nie eine zweite physische HTTP-Anfrage. Das ist gut für den Fall der Börsenticker Beispiel, weil sich die historische Ticker-Daten ändert sich nie. Sind die Daten zu ändern, müssten Sie eine Möglichkeit, veraltete Daten angegeben haben. In einem solchen Fall wäre ein HTTP-Cache Validierung geeigneter sein. Der folgende Code ist die Umsetzung einer einzigen Anfrage Client-Cache.

 Quelle: / client / scripts / Jaxson / Common.js CacheController (var = _cache: new Array ();) function CachedProcessAndBreakBeforeRequest (Antrag, settings) (if (request.action == "GET") (var obj = CacheController._cache [settings . url]; catch if (obj! = null) (var fakeXMLHttp = (status: 200, statusText: obj.StatusText, responseText: obj.ResponseText, responseXML: obj.ResponseXML) try (settings.onComplete (fakeXMLHttp);) ( e) (globals.errorHandler (e); return false) return true;)) return false;) function CachedProcessAndBreakAfterRequest (xmlhttp verlangen, settings) (if (xmlhttp.status == 200 & & request.action == "GET") (CacheController._cache [settings.url] = (Status: xmlhttp.status, StatusText: xmlhttp.statusText, ResponseText: xmlhttp.responseText, responseXML: XMLHTTP.responseXML);) return false;)

Die einzigen Antrag client-side-Cache funktioniert nur, wenn der HTTP-GET heißt, das ist völlig logisch, aber nicht die Frage, ob ein POST, DELETE-oder PUT-Cache gespeichert werden können. Die Antwort ist, ja sie können, bitten, wenn der Cache intelligent. Zum Beispiel, wenn Sie den Cache ein PUT, dann, wenn die gleiche URL aufgerufen wird mit GET, brauchen Sie keine Anfragen an den Server. Diese Strategie kann Sie in Schwierigkeiten geraten, wenn es eine Chance gibt, dass mehrere Benutzer ausgeführt werden, wird eine PUT. Aber es ist eine Optimierung in diesem Spin-off können Sie einen JavaScript-Gewinde und Abfrage des Status der Daten durch die Verwendung von HTTP PUT Validierung geschickt. Es ist wichtig zu erkennen, dass Sie den Cache nach Ihren Wünschen Tune kann. Man könnte sogar stimmen dem Cache, so dass es kann Vorspannung URLs, wenn bestimmte URLs beantragt wurden.

Die einzigen Antrag client-side-Cache ist nicht, dass intelligente und gibt ein Objekt zurück, wenn sie im Cache vorhanden ist, ansonsten fragt er den HTTP-Server. Die CachedProcessAndBreakBeforeRequest Funktion aufgerufen wird, bevor eine physikalische Asynchronous Anfrage macht. Wenn die Funktion aufgerufen wird, wird die Existenz der URL in der CacheController._cache Objekt getestet. Wenn die URL nicht vorhanden ist, dann false zurückgegeben wird, darauf hinweist, dass die URL ausgeführt werden soll. Wenn die URL existiert, dann ein Objekt im Cache vorhanden ist. Die Existenz eines zwischengespeicherte Objekt bedeutet, dass es nicht notwendig ist, den Server aufzurufen, und der Code ist onComplete Methode kann direkt aufgerufen werden. Das einzige Problem mit dem Cache-Objekt ist, dass es keine verfügbaren XMLHttpRequest-Instanz.

Die Lösung dieses Problems besteht darin, eine falsche Instanz von XMLHttpRequest zu schaffen. Mit Hilfe von JavaScript, es ist leicht zu einer gefälschten Objekt zu erstellen. Wo die Dinge schwierig werden, dass die Methoden noch nicht festgelegt worden, damit sie nicht verfügbar sind. Die Header sind nicht verfügbar, da sie nicht in das Objekt gespeichert ist, wenn die Cache-Objekt erzeugt wurde. Auch hier zeigt die Tatsache, dass die Header wurden nicht im Cache gespeichert, dass dies eine einfache Implementierung von XMLHttpRequest wird. Die fakeXMLHttp Variable repräsentiert die gefälschte XMLHttpRequest-Objekt und wird verwendet, um den Code zu settings.onComplete Methode aufrufen. Da settings.onComplete aufgerufen wird, gibt den Cache ein falscher Wert zeigt an, dass Asynchronous eine HTTP-Anfrage nicht machen sollte.

Der andere Teil, um den Cache-Code ist der CacheProcessAndBreakAfterRequest-Funktion, die verwendet wird, um ein Cache-Objekt-Eintrag hinzufügen. Der Zusatz des Objekts im Cache ist ein HTTP-Statuscode 200 eingeschränkt und ein HTTP-GET. Wenn das Objekt in den Cache aufgenommen, so das XMLHttpRequest-Objekt, Status, statusText, responseText und responseXML gespeichert werden. Wollte man eine vollständige Implementierung des gefälschten XMLHttpRequest-Objekt erstellen und die HTTP-Header zu speichern, geben Sie den Code in das CacheProcessAndBreakAfterRequest Funktion setzen. Als Alternative könnte man versucht sein, eine Referenz auf das XMLHttpRequest-Instanz zu speichern. Das Problem ist, dass der Cache nicht die Kontrolle über das XMLHttpRequest-Instanz, so dass durch das Speichern einer Referenz, Sie sind nicht die Daten zu speichern, wie die asynchrone So könnte das XMLHttpRequest-Instanz für eine weitere Anfrage wiederverwendet werden. Deshalb, wenn Sie den Cache Durchführung, müssen Sie die Informationen, die im Cache gespeichert werden soll kopieren.

Die Implementierung eines HTTP-Client-Cache-ValidierungDer Cache-Umsetzung wird in so einfach einmal eine Anfrage ausgeführt und gespeichert wird, wird es nie wieder ausgeführt werden. Für URLs, wo die Daten sich nie ändert, ist dies akzeptabel. Allerdings gibt es URLs, wo sich die Daten ändern, wie es der Fall mit einem Echtzeit-Börsenticker, und die einzigen Antrag Client-Cache ist völlig inakzeptabel. In diesen Fällen muss die einzelne Anfrage Client-Cache erweitert werden, um HTTP-Validierung zu verwenden.

HTTP-Caching Verfall ist eine schlechte Idee (generell) Wenn Sie HTTP-Validierung verwenden, werden Sie lassen die Internet-Infrastruktur verwalten Caching. Es gibt zwei Modelle: HTTP Ablauf-und HTTP-Validierung. Bei der Verwendung von HTTP-Ablauf, Werden Sie sagen, dass Inhalte für einen bestimmten Zeitraum gültig. Die Frist für die die Daten gültig ist, hängt davon ab, was die HTTP-Header zu sagen. Es ist allgemein keine gute Idee, um die HTTP-Ablauf-Modell verwenden, sondern es ist besser zu nutzen HTTP-Validierung und Code schreiben, um die Internet-Infrastruktur helfen seine Arbeit auf. Um zu verstehen, warum die HTTP-Ablauf-Modell problematisch ist, das folgende Szenario. Angenommen, Sie laufen AWeb Website, die Hosts-Nachrichten-Feeds. Um sich wiederholende Verkehr auf der Website zu reduzieren, können Sie HTTP-Caching und weisen eine Verfallszeit von 30 Minuten. (Das Verfallsdatum ist ein willkürlicher Wert zu illustrativen Zwecken verwendet.) Dies bedeutet, dass, wenn ein Browser lädt einige Inhalte, die nächste Version des Inhalts werden in 30 Minuten zur Verfügung. Angabe einer Wartezeit von 30 Minuten ist eine schlechte Idee, dass in 30 Minuten, können Nachrichten dramatisch verändern.

Ein Kunde, der einige Inhalte heruntergeladen hat, ist dann Abrufen von Nachrichten in 30-Minuten-Zyklen eingeschränkt. Natürlich kann der Kunde zu ignorieren oder den Cache zu leeren, was zu Downloads der neuesten Informationen. Wenn der Kunde immer den Cache leert, wird der Kunde immer die neuesten Nachrichten, jedoch auf Kosten der Inhalte herunterladen, die nicht verändert haben. Die Ressource kosten sollte niemanden überraschen, denn immer immer die neuesten Inhalte gilt, durch kein Caching überhaupt. Scripts wie Java Servlets / JSP oder ASP.NET-Seiten oft verwenden diese Strategie, und der Administrator der Website fragt sich, warum gibt es Performance-Probleme.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Verwalten der Daten mit einer Client-Cache mit Ajax" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 434 users browsing the articles directory