La gestión de los datos mediante un caché de cliente utilizando AjaxLa gestión de los datos mediante un caché de clienteEl rendimiento de la aplicación depende de la caché que se ejecutan en el cliente y la parte del servidor. Si la caché de un rendimiento bajo, la aplicación se realice mal. Si los depósitos son efectivas, la aplicación será efectiva. En gran medida, lo que he dicho es obvio, pero quiero destacar que no importa lo bien escrito las demás partes de su código son, si usted tiene una estrategia de almacenamiento en caché de malo, la aplicación se realice mal. Cuatro tipos de almacenamiento en caché de la estrategia se puede implementar:
• Validación de HTTP: Una forma de almacenamiento en caché en el cliente y compartir información acerca de una URL del navegador utilizando un protocolo de reconocimiento mutuo. Esta forma de almacenamiento en caché no reduce el contador de la conversación, pero reduce la cantidad de datos enviados en la conversación. Use este método si tiene datos que cambian regularmente y su conexión de red entre el cliente y el servidor es de una calidad de banda ancha. • Del lado del cliente sólo: Una forma de almacenamiento en caché en el que sólo el caché del lado cliente de la información. Normalmente, se utiliza este método cuando el servidor no admite el almacenamiento en caché, o si el de ida y vuelta entre el cliente y el servidor requiere demasiado tiempo. • Del lado del servidor sólo: Una forma de almacenamiento en caché en el que sólo el caché del lado del servidor la información. El cliente siempre se consulta al servidor de la información adecuada. Esta forma de memoria caché es generalmente ineficaz, y debe utilizarse sólo si la distancia física de redes entre el cliente y el servidor es mínima (por ejemplo, el navegador y el servidor están en el mismo equipo). • Cliente y servidor: Una forma ideal generalizado de almacenamiento en caché en el servidor y la información de la caché de cliente. En cada una de estas estrategias de almacenamiento en caché, es necesario pensar en el ancho de banda disponible, ¿qué tipo de datos que está recibiendo, y lo lejos que el cliente es de la servidor. Una preocupación adicional es el proxy sentado entre el cliente y el servidor que podría caché de la información. Implementación de una solicitud de cliente de cachéUn depósito de efectivo y eficiente no cambiaría el modelo de programación del cliente. Por lo tanto, un caché de cliente es la mejor práctica mediante la modificación de la clase asíncrona. Entonces, cada vez que utiliza un código asíncrono, se comprueba la caché y verificado para ver si la respuesta es ya están disponibles. Si la respuesta está disponible, entonces el código recibe la respuesta de inmediato. El ejemplo siguiente tiene ganchos para hacer uso de una caché. Fuente: / cliente / scripts / Jaxson / Common.js función Asynchronous_call (solicitud) (var = esta instancia; if (! this.settings) (throw new error ( "Configuración no está definida");) if (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (throw new error ( "solicitud activos actualmente no puede continuar");) this.xmlhttp.open (request.action, request.url, es cierto, this.settings.username, este . settings.password); globals.info ( "solicitud de apertura" request.url +) if (request.headers) (for (defHeader en request.headers) (this.xmlhttp.setRequestHeader (defHeader, request.headers [defHeader] );)) if (this.settings.headers) (for (defHeader en this.settings.headers) (this.xmlhttp.setRequestHeader (defHeader, this.settings.headers [defHeader]);)) = this.settings.url request.url; if (this.cache.processAndBreakBeforeRequest (this.xmlhttp, this.settings petición) == true) ( globals.info datos recuperados ( "desde la memoria caché para la petición de" + instance.settings.url); retorno; )this.xmlhttp.onreadystatechange = function () (if (instance.xmlhttp.readyState == 4) (globals.info datos recibidos ( "por solicitud" + instance.settings.url); if (instance.cache.processAndBreakAfterRequest (instance.xmlhttp, instance.settings petición) == true) ( retorno; )try (instance.settings.onComplete (instance.xmlhttp);) catch (e) (globals.errorHandler (e);))) try (this.xmlhttp.send (request.data);) catch (e) (globales. errorHandler (e);)) El código asíncrona es muy similar a lo que se presentó en el artículo 4. Los nuevos componentes están en negrita. Conectar una memoria caché en asíncrona es fácil: se necesita para capturar la solicitud antes de enviarla, y luego capturar la respuesta cuando llegue. Asíncrono no implementa un caché, porque hay muchas maneras de un código de caché. La estrategia más inteligente, y el elegido por asíncrona, es delegar las llamadas a otro método. En el caso de la captura de una solicitud, se llama al método this.cache.processAndBreakBeforeRequest. El XMLHttpRequest, solicitar, y la configuración de la instancia asincrónica se pasan al método. Si el método devuelve true, entonces Asynchronous_call regresa inmediatamente. La devolución inmediata por lo general indica que los datos en la caché, pero también puede ser usada para detener una solicitud. En el caso de la captura de una respuesta, dentro de la aplicación de onreadystatechange es una solicitud para el método de instance.cache.processAndBreakAfterRequest. Tres parámetros se pasan al método: una instancia XMLHttpRequest, solicitar, y los ajustes. Basándose en estos tres parámetros, la caché puede almacenar los datos de respuesta para ser recuperado en un momento posterior. Si los rendimientos processAndBreakAfterRequest método de verdad, entonces los datos de respuesta no se envía al método onComplete. En general, usted no haría esto, pero es necesario si la aplicación de un caché de validación de HTTP. El tipo de caché que desea aplicar depende de sus necesidades. Puede ser un caché de cliente o de un caché de validación de HTTP. En el contexto de la solicitud de cotización, una sola solicitud de caché de cliente se crea. El caché de cliente única petición será caché de cada solicitud una vez y nunca hacer una segunda petición HTTP física. Esto está bien para el caso del ejemplo de cotización de valores, porque los datos históricos de cotización nunca cambia. Si los datos iban a cambiar, usted tendría que tener una forma de indicar datos antiguos. En tal caso, la validación de un caché de HTTP, sería más apropiado. El código siguiente es la aplicación de una sola caché de solicitud del cliente. Fuente: / cliente / scripts / Jaxson / var Common.js CacheController = (_cache: new Array valores (),) function CachedProcessAndBreakBeforeRequest (solicitud, la configuración) (if (request.action == "GET") (var obj = CacheController._cache [ . url] if (obj! = null) (var fakeXMLHttp = (estado: 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, solicitar, configuración) (if (xmlhttp.status == 200 & & request.action == "GET") (CacheController._cache [settings.url] = (Estado: xmlhttp.status, StatusText: xmlhttp.statusText, ResponseText: xmlhttp.responseText, responseXML: xmlhttp.responseXML);) return false;) El cliente única petición caché de opera sólo cuando el HTTP GET que se llama, que es totalmente lógico, pero se plantea la pregunta de si un. POST, DELETE, o PUT puede almacenar en caché La respuesta es, sí que pueden, si la caché es inteligente. Por ejemplo, si usted fuera a la caché de un PUT, a continuación, cuando la misma URL que se llama utilizando GET, no es necesario consultar al servidor. Esta estrategia se puede meter en problemas si hay una posibilidad de que varios usuarios se ejecuta un PUT. Pero hay una optimización en el que se puede escindir un hilo de JavaScript y consultar el estado de los datos enviados por el PUT de validación utilizando HTTP. Es importante darse cuenta de que puede ajustar el caché a sus preferencias. Usted podría incluso ajustar el caché de tal manera que las URL de precarga puede determinadas URL cuando han sido solicitados. La solicitud de cliente única caché en el lado no es tan inteligente y devuelve un objeto si es que existe en la memoria caché, de lo contrario, consulta el servidor HTTP. La función se llama antes de CachedProcessAndBreakBeforeRequest Asynchronous hace una solicitud física. Cuando se llama a la función, la existencia de la dirección es la prueba en el objeto CacheController._cache. Si la URL no existe, entonces se devuelve false, lo que indica que la dirección debe ser ejecutado. Si la URL no existe, entonces existe un objeto en caché. La existencia de un objeto en caché significa que no es necesario llamar al servidor, y el método onComplete el código puede ser llamado directamente. El único problema con el objeto en caché es que no hay una instancia XMLHttpRequest disponibles. La solución a este problema es crear una instancia de falsos de XMLHttpRequest. Uso de JavaScript, es fácil crear un objeto de falsificación. Cuando las cosas se ponen difíciles es que los métodos no se han definido, por lo tanto no están disponibles. Los encabezados no están disponibles porque no han sido almacenados en el objeto cuando se creó el objeto en caché. Una vez más, el hecho de que las cabeceras no han sido almacenados en la caché destaca que se trata de una implementación simple de XMLHttpRequest. La variable fakeXMLHttp representa el objeto XMLHttpRequest falso y se utiliza para llamar al método settings.onComplete del código. Debido settings.onComplete se llama, la memoria caché devuelve un valor false, lo que indica que asincrónica no debe hacer una petición HTTP. La otra parte del código de caché es la función de CacheProcessAndBreakAfterRequest, que se utiliza para agregar una entrada de objetos almacenados en caché. La adición del objeto en la caché está limitado a un código de estado HTTP de 200 y un HTTP GET. Si el objeto se agrega a la caché, entonces el XMLHttpRequest de propiedad, se guardan en el estado, statusText, responseText, y responseXML. Si quieres crear una implementación completa del objeto XMLHttpRequest falsos y guardar las cabeceras HTTP, sería colocar el código en la función CacheProcessAndBreakAfterRequest. Como alternativa, podría verse tentado a ahorrar una referencia a la instancia de XMLHttpRequest. El problema es que el caché no está en control de la instancia de XMLHttpRequest, por lo que el ahorro por una referencia, no están ahorrando los datos, como la instancia de Asynchronous podría reutilizar la instancia de XMLHttpRequest para otra petición. Por lo tanto, cada vez que la aplicación de la caché, tiene que copiar la información que se debe guardar en la caché. La aplicación de un caché de HTTP validación del clienteLa aplicación de caché es simple en que una vez que una solicitud ha sido ejecutado y se guarda, que nunca se ejecutará de nuevo. Para las URL donde los datos nunca cambia, esto es aceptable. Sin embargo, hay URL donde los cambios de datos, como es el caso de un real-tiempo de cotización de valores, y la caché de cliente única petición es totalmente inaceptable. En estas situaciones, la caché de cliente única solicitud debe ampliarse a utilizar la validación de HTTP. El almacenamiento en caché HTTP de caducidad es una mala idea (en general) Cuando se utiliza la validación de HTTP, usted está dejando la infraestructura de Internet gestionar el almacenamiento en caché. Hay dos modelos: de caducidad HTTP y la validación de HTTP. Cuando se utiliza Vencimiento HTTP, Usted está diciendo que el contenido es válido para un período de tiempo determinado. El período de tiempo durante el cual los datos son válidos depende de lo que dicen las cabeceras HTTP. Generalmente no es una buena idea utilizar el modelo de caducidad HTTP, sino que es mejor utilizar Validación de HTTP y escribir código para ayudar a la infraestructura de Internet hacer su trabajo. Para entender por qué el modelo de caducidad HTTP es problemático, considere la situación siguiente. Digamos que se están ejecutando AWeb que aloja el sitio de noticias. Para reducir el tráfico repetitivo en el sitio web, se habilita el almacenamiento en caché de HTTP y asignar una fecha de caducidad de 30 minutos. (La fecha de caducidad es un valor arbitrario utilizado para fines ilustrativos.) Esto significa que cuando el navegador descarga algún contenido, la próxima versión de los contenidos estarán disponibles en 30 minutos. Lo que indica un período de espera de 30 minutos es una mala idea en que 30 minutos, noticias puede cambiar dramáticamente. Un cliente que ha descargado algún contenido entonces se limita a la recuperación de noticias en ciclos de 30 minutos. Por supuesto, el cliente puede pasar por alto o vaciar la caché, como resultado de las descargas de la última información. Si el cliente siempre se vacía la memoria caché, el cliente siempre recibirá las últimas noticias, pero a un costo de la descarga de contenido que no puede haber cambiado. El costo de los recursos no debería sorprender a nadie, porque siempre se mete el contenido más reciente que consiste en utilizar sin caché alguno. Secuencias de comandos como servlets Java / JSP o páginas ASP.NET utilizan a menudo esta estrategia, y el administrador de la gestión del sitio web se pregunta por qué hay problemas de rendimiento. un artículo presentado por Sonja Lande Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito. Importante: Este artículo "Gestión de los datos mediante un cliente de caché con Ajax" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.
|
|||||
| Online: 110 users browsing the articles directory |
|
|