2010-05-14 18 views
7

Hemos identificado que los cachés completos del navegador son la causa de un problema en nuestra extranet. Solo afecta a un pequeño número de nuestros usuarios, pero queremos alertarlos sobre el problema y brindarles orientación sobre cómo solucionar el problema por sí mismos.Detectando si el caché de un navegador está lleno

Queremos utilizar un sistema similar al que usa GMail. Cuando detecta que el caché de su navegador está lleno no se comporta como debería, muestra un mensaje de advertencia que le dice a los usuarios que su caché está llena y que puede causar problemas con GMail, junto con un enlace a Gmail Help page on clearing your browser's cache.

¿Alguien sabe si hay recursos por ahí, o ejemplos de cómo usar JavaScript para detectar que el caché del navegador es completo teniendo un comportamiento incorrecto?

Gracias.


Aclaración: Lo que en realidad estamos tratando de detectar, supongo, no es si o no el caché está llena, sino más bien si un guión, que hemos configurado en el servidor para almacenar en la memoria caché se vuelve a solicitar al servidor, de tal forma que el navegador se comporta de manera extraña o como si su caché no se comportara como debería.


más aclaraciones: Gracias a todos por los cambios en el almacenamiento en caché. Nuestros scripts se envían con los encabezados correctos, y solo estamos viendo este problema en IE6 e IE7, los navegadores Mozilla y WebKit no parecen estar afectados, pero aún no estoy seguro de cómo usar JavaScript y/o XmlHttpRequest para verificar si un objeto se recuperó o no de la memoria caché, lo que nos permite verificar si la memoria caché se está comportando mal.

+1

Independientemente de si esto es realmente posible (lo dudo), cuando un caché del navegador se considera completo, ya que es básicamente una cola donde se borran los datos más antiguos, cuando se necesita espacio. ¿O cuándo no está lleno? No estar lleno requeriría que el usuario lo vacíe regularmente, lo que la mayoría de las personas nunca hace ... – RoToRa

+2

Tengo curiosidad por cómo y por qué determinó que un * caché completo era el problema, a diferencia de los datos contradictorios en el caché o algo así. De todos modos, si eres la misma persona que sufrió muchos abusos en comp.lang.javascript (http://groups.google.co.uk/group/comp.lang.javascript/browse_thread/thread/45bcce73055047bd/d003efbfda8c4512) , Espero que obtengas un mejor trato en stackoverflow ... –

+0

Heh ... no, ese no era yo en comp.lang.javascript. Lo que supongo que realmente estoy preguntando es qué está haciendo GMail para detectar que la memoria caché de su navegador está * llena *, y mostrar este mensaje a nuestros usuarios finales. A través de su enlace, y mediante una lectura rápida, pude encontrar esta discusión (http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/ce1ac46f82dfa7c9?pli=1) que explica qué es probable que continúe y cómo hacerlo. Gracias! – abitgone

Respuesta

5

la caché del navegador voluntad no causar problemas si está lleno ... con unas pocas notas de menor importancia.

  1. Si la memoria caché del navegador está llena, el navegador simplemente tiene que descargar contenido nuevo en lugar de extraerlo de su caché local. (Por ejemplo, es más lento)
  2. Si la memoria caché del navegador contiene datos no válidos (por ejemplo, una copia anterior de un archivo JavaScript), entonces sí, puede encontrar problemas. (No porque el caché esté lleno, sino porque no entregó un archivo nuevo para el usuario (Google for: expires headers y cómo alterar la ruta URL a sus archivos cuando realiza cambios de scripts para asegurarse de "romper" el caché)))
  3. En Internet Explorer, cuando inserta un archivo de descarga (por ejemplo, una hoja de cálculo de Excel) al usuario debe ir al caché para funcionar (un error IE) - Estoy no estoy seguro si el archivo es más grande de caché totales de los usuarios, si eso provoca problemas con el archivo que se almacena, y por lo tanto cargado (apiladoras pls sienten libres para confirmar si esto de una manera u otra)

actualización: Sobre la base de su aclaración, es necesario asegurarse de que cualquier secuencia de comandos que envía al cliente es apropiada en caché ... que significa:

  • cambiar la dirección URL a las secuencias de comandos cuando se desea una nueva versión que se descargado (ej.)
  • Una vez que esté seguro de que la URL cambia, puede enviar encabezados de caché que indiquen al navegador que guarden en caché los archivos durante mucho tiempo (por ejemplo, los archivos de JS Library (por ejemplo, jQuery) no cambian cada hora , día, semana o incluso mes)
+0

Dado que, sugeriría esperar hasta que la página haya terminado de cargarse y luego desencadenar una solicitud asincrónica para los (encabezados de) la misma secuencia de comandos que estamos cargando en la sección '' de la página, luego verificar si se cargó desde la memoria caché o desde el servidor? – abitgone

0

Esto probablemente no funcionará como está. Pero es sólo una idea:

var img = new Image(); 
(new Image).src = "imageWithFarFutures.png"; 
window.onload = function(){ 
    document.getElementById("someIframe").src = "imageWithFarFutures.png"; 
    // NOW if the server DOES get a FRESH request for "imageWithFarFutures.png" 
    // wouldn't it mean that the browser has kicked it out of its cache? 
}; 
0

considerar el envío de una cabecera para que su aplicación nunca almacenar en caché el contenido y tener que expire inmediatamente.

+0

¿Por qué? Eso está completamente en contra de lo que intentamos hacer: queremos que esta pieza de contenido en particular sea almacenada en caché. – abitgone

Cuestiones relacionadas