La gestione dei dati utilizzando una cache client con Ajax

La gestione dei dati utilizzando una cache ClientLa performance delle applicazioni dipende dalla cache che vengono attuate sul client e lato server. Se la cache di scarso rendimento, l'applicazione eseguirà male. Se le cache sono efficaci, la domanda potrà essere efficace. In larga misura, ciò che ho appena detto è evidente, ma voglio sottolineare che non importa quanto ben scritto altre parti del codice sono, se avete una cattiva strategia di caching, l'applicazione verrà scarso rendimento. Quattro tipi di caching strategia può essere attuato:

  

HTTP convalida: Una forma di caching in cui il cliente e condividere le informazioni del browser su un URL utilizzando un protocollo di handshaking. Questa forma di caching non riduce il contatore conversazione, ma non riduce la quantità di dati inviati durante la conversazione. Utilizzare questo approccio se si dispone di dati che cambia regolarmente e la connessione di rete tra il client e il server è di qualità a banda larga.

Client-side solo: Una forma di caching, dove solo la cache lato client le informazioni. In genere, si utilizza questo metodo quando il server non supporta il caching, o se il round-trip tra il client e server richiede troppo tempo.

Server-side solo: Una forma di caching, dove solo la cache lato server le informazioni. Il cliente sarà costantemente interrogare il server per le informazioni del caso. Questa forma di cache è generalmente inefficiente, e dovrebbe essere utilizzata solo se la distanza fisica di rete tra client e server è minima (ad esempio, il browser e il server sono sullo stesso computer).

Client e lato server: Un modo generalizzato ideale di caching in cui sia il server e le informazioni di cache di client. In ciascuna di queste strategie di caching, è necessario pensare alla larghezza di banda disponibile, che tipo di dati che si ricevono, e in che misura oltre il client è da server. Un ulteriore preoccupazione è il proxy seduta tra il client e server che potrebbe cache le informazioni.

L'attuazione di una singola cache richiesta del clientUna cache efficace ed efficiente non sarebbe cambiato il modello di programmazione del cliente. Pertanto, una cache lato client è meglio attuato modificando la classe asincrono. Allora ogni volta che utilizza un codice asincrono, la cache viene controllato e verificato per vedere se la risposta è già disponibili. Se la risposta è disponibile, quindi il codice riceve la risposta immediatamente. L'esempio che segue è ganci a fare uso di una cache.

 Fonte: / client / scripts / jaxson / Common.js funzione Asynchronous_call (richiesta) (var instance = this; if (! this.settings) (throw new Error ( "Impostazioni" non è definita ");) if (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (throw new Error ( "richiesta Attualmente attiva non può continuare");) this.xmlhttp.open (request.action, request.url, vero, this.settings.username, questo . settings.password); globals.info ( "Richiesta di apertura" + 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, this.settings, richiesta) == true) ( globals.info ( "i dati Estratto da cache per la richiesta di" + instance.settings.url); return; )this.xmlhttp.onreadystatechange = function () (if (instance.xmlhttp.readyState == 4) (globals.info ( "i dati ricevuti per la richiesta di" + instance.settings.url); if (instance.cache.processAndBreakAfterRequest (instance.xmlhttp, instance.settings, richiesta) == true) ( return; )try (instance.settings.onComplete (instance.xmlhttp);) catch (e) (globals.errorHandler (e);))) try (this.xmlhttp.send (request.data);) catch (e) (globali. errorHandler (e);))

Il codice asincrono è molto simile a quello che è stato presentato all'articolo 4. Le parti nuove sono in grassetto. Agganciare un cache in asincrono è semplice: è necessario acquisire la richiesta prima che sia inviato, e quindi acquisire la risposta quando si arriva. Asincrono non implementa una cache, perché ci sono molti modi per il codice di una cache. La strategia più intelligente, e quello scelto da asincrono, è quello di delegare le chiamate a un altro metodo. In caso di cattura di una richiesta, il metodo this.cache.processAndBreakBeforeRequest viene chiamato. XMLHttpRequest, su richiesta, e le impostazioni dell'istanza asincroni vengono passati al metodo. Se il metodo restituisce true, quindi Asynchronous_call restituisce immediatamente. Il ritorno immediato in genere indica che i dati si trova nella cache, ma può anche essere usato per interrompere una richiesta.

Nel caso di acquisizione di una risposta, nell'ambito dell'attuazione della onreadystatechange è una richiesta al metodo instance.cache.processAndBreakAfterRequest. Tre parametri vengono passati al metodo: un'istanza XMLHttpRequest, su richiesta, e le impostazioni. Sulla base di questi tre parametri, la cache in grado di memorizzare i dati di risposta per essere recuperato in un momento successivo. Se il metodo restituisce processAndBreakAfterRequest vero, allora i dati della risposta non viene inviato al metodo onComplete. In generale, non farebbe questo, ma è necessario se si sta attuando una cache di convalida HTTP.

Il tipo di cache che si desidera implementare dipende dalle vostre esigenze. Può essere una cache lato client o di una cache di convalida HTTP. Nel contesto della domanda di codice del titolo, una singola cache client richiesta è creato. La cache singolo client cache ogni richiesta verrà richiesta una sola volta e non fanno mai una seconda richiesta HTTP fisica. Questo va bene per il caso ad esempio del codice del titolo, in quanto i dati storici ticker non cambia mai. Se i dati sono stati per cambiare, si avrebbe bisogno di avere un modo di indicare i dati non aggiornati. In tal caso, una cache di convalida HTTP sarebbe più appropriato. Il seguente codice è l'implementazione di una cache unico client richiesta.

 Fonte: / client / scripts / jaxson / var Common.js CacheController = (_cache: new Array impostazioni ();) function CachedProcessAndBreakBeforeRequest (richiesta, impostazioni) (if (request.action == "GET") (var obj = CacheController._cache [ . url]; if (obj! = null) (var fakeXMLHttp = (stato: 200, statusText: obj.StatusText, responseText: obj.ResponseText, responseXML: obj.ResponseXML) try (settings.onComplete (fakeXMLHttp);) catch ( e) (globals.errorHandler (e); return false) return true;)) return false;) function CachedProcessAndBreakAfterRequest (XMLHTTP, su richiesta, le impostazioni) (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;)

L'unico client richiesta cache lato funziona solo quando la si chiama HTTP GET, che è del tutto logico, ma non chiedo la questione se un POST, DELETE o PUT possono essere memorizzate nella cache. La risposta è, sì, possono, se la cache è intelligente. Per esempio, se si dovesse cache di un PUT, poi, quando lo stesso URL viene chiamato con GET, non è necessario per interrogare il server. Questa strategia può mettervi nei guai se c'è una possibilità che gli utenti multipli sarà l'esecuzione di un PUT. Ma c'è una ottimizzazione in quanto è possibile spin-off di un thread JavaScript e verificare lo stato dei dati inviati dal PUT con la convalida HTTP. E 'importante rendersi conto che è possibile ottimizzare la cache in base alle proprie preferenze. Si potrebbe persino regolare la cache in modo da poter URL precarico quando gli URL alcune sono state richieste.

L'unico client richiesta cache lato non è che intelligente e restituisce un oggetto, se esso esiste nella cache, altrimenti, si interroga il server HTTP. La funzione CachedProcessAndBreakBeforeRequest viene chiamato prima Asynchronous effettua una richiesta fisico. Quando la funzione viene chiamata, l'esistenza di URL è testato in oggetto CacheController._cache. Se l'URL non esiste, allora viene restituito false, che indica che l'URL deve essere eseguito. Se l'URL esiste, quindi un oggetto nella cache. L'esistenza di un oggetto in cache significa che non è necessario chiamare il server, e il metodo onComplete il codice può essere chiamato direttamente. L'unico problema con l'oggetto in cache è che non vi è alcun esempio XMLHttpRequest disponibili.

La soluzione a questo problema è quello di creare un'istanza di XMLHttpRequest falso. Usando JavaScript, è facile per creare un oggetto falso. Le cose si fanno difficili è che i metodi non sono stati definiti, quindi non sono disponibili. Le intestazioni non sono disponibili perché non sono stati immagazzinati in oggetto quando l'oggetto in cache è stato creato. Anche in questo caso, il fatto che le intestazioni non sono state memorizzate nella cache sottolinea che si tratta di una semplice implementazione di XMLHttpRequest. La variabile fakeXMLHttp rappresenta l'oggetto XMLHttpRequest falso e viene utilizzato per chiamare il metodo settings.onComplete del codice. Perché settings.onComplete si chiama, la cache restituisce un valore false, che indica che Asynchronous non dovrebbe effettuare una richiesta HTTP.

Dall'altra, per il codice di cache è la funzione CacheProcessAndBreakAfterRequest, che viene utilizzato per aggiungere una voce nella cache di oggetti. L'aggiunta di oggetto di cache è vincolato a un codice di stato HTTP 200 e di un HTTP GET. Se l'oggetto viene aggiunto alla cache, quindi la proprietà XMLHttpRequest, lo stato, statusText, responseText e responseXML vengono salvati. Se si voleva creare una completa attuazione dell'oggetto XMLHttpRequest falsi e salvare le intestazioni HTTP, si metterebbe che il codice nella funzione CacheProcessAndBreakAfterRequest. In alternativa, si potrebbe essere tentati di salvare un riferimento all'istanza XMLHttpRequest. Il problema è che la cache non è in controllo della istanza XMLHttpRequest, in modo da risparmiare un riferimento, non si salvano i dati, come l'istanza asincrono potrebbe riutilizzare l'istanza XMLHttpRequest per un'altra richiesta. Pertanto, ogni volta la cache di esecuzione, è necessario copiare le informazioni che devono essere salvati nella cache.

L'attuazione di una cache HTTP Validation ClientL'attuazione di cache è semplice in quanto una volta che una richiesta è stato eseguito e salvato, non potrà mai essere eseguito di nuovo. Per gli URL in cui i dati non cambia mai, questo è accettabile. Tuttavia, ci sono gli URL in cui le modifiche di dati, come ad esempio è il caso di un vero ticker delle scorte in tempo, e la cache singolo client richiesta è del tutto inaccettabile. In tali situazioni, la cache del singolo client richiesta deve essere esteso a utilizzare la convalida HTTP.

HTTP Scade il caching è una cattiva idea (in generale) Quando si utilizza la convalida HTTP, si è lasciando l'infrastruttura di Internet gestire il caching. Ci sono due modelli: la scadenza HTTP e convalida HTTP. Quando si utilizza HTTP scadenza, Lei sta dicendo che il contenuto è valida per un certo periodo di tempo. Il periodo di tempo in cui i dati sono validi dipende da ciò che dicono le intestazioni HTTP. Generalmente non è una buona idea di utilizzare il modello di scadenza HTTP, anzi, è meglio usare HTTP convalida e scrivere il codice per aiutare l'infrastruttura di Internet fare il suo lavoro. Per capire perché il modello di scadenza HTTP è problematico, si consideri il seguente scenario. Say si esegue AWeb sito che ospita i feed di notizie. Per ridurre il traffico ripetitivo sul sito Web, si attiva il caching HTTP e assegnare una scadenza di 30 minuti. (Il tempo di scadenza è un valore arbitrario usate per scopi illustrativi.) Ciò significa che quando un browser download alcuni contenuti, la prossima versione del contenuto sarà disponibile in 30 minuti. Indicando un periodo di attesa di 30 minuti è una cattiva idea che in 30 minuti, notizie possono cambiare drasticamente.

Un cliente che si è scaricato alcuni contenuti è quindi limitato a recuperare le notizie in cicli di 30 minuti. Naturalmente, il cliente potrebbe ignorare o svuotare la cache, con conseguente download delle informazioni più recenti. Se il cliente si svuota sempre la cache, il cliente sarà sempre ricevere le ultime notizie, ma a un costo di download di contenuti che non possono essere cambiate. Il costo delle risorse non dovrebbe sorprendere nessuno, perché ottenendo sempre i contenuti più recenti: l'impiego di n. cache di sorta. Script come servlet Java / JSP o pagine ASP.NET utilizzano spesso questa strategia, e l'amministratore di gestione del sito web si chiede perché non ci sono problemi di prestazioni.

un articolo presentato da Sonja Lande


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo è "la gestione dei dati utilizzando un client di cache utilizzando Ajax" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 375 users browsing the articles directory