Foros del Web » Programando para Internet » Javascript »

src desde cache ¿es posible?

Estas en el tema de src desde cache ¿es posible? en el foro de Javascript en Foros del Web. Buenas caballeros! Tengo una duda, si por ejemplo, instancio un objeto Image , y le añado un src a este objeto, <- y esto lo ...
  #1 (permalink)  
Antiguo 26/11/2012, 12:37
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Pregunta src desde cache ¿es posible?

Buenas caballeros!

Tengo una duda, si por ejemplo, instancio un objeto Image, y le añado un src a este objeto, <- y esto lo llamo en la etiqueta body con un evento onload.

¿Si quiero extraer esa src de la cache, como hago? , ejemplo :

Código Javascript:
Ver original
  1. var ImagenPrueva = new Image();
  2. ImagenPrueva.src = "/Imagenes/Sprite.gif";
  3.  
  4. document.getElementById('IdDondeQuieroLaImagenDeFondo').style.backgroundImage = /* ¿que pongo aquí?, como le digo que extraiga la imagen de la cache? */


En la ultima linea, ¿como le indico, que extraiga la imagen de la cache?, es decir, que sintaxis uso para decirle a javascript que ponga como backgroundImage, la imagen que previamente cargue en la cache?
  #2 (permalink)  
Antiguo 26/11/2012, 12:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: src desde cache ¿es posible?

buenas,
siemplemente debes poner la misma URL. en javascript no existe la posibilidad de controlar el mecanismo de la cache. eso lo maneja el propio navegador. si ya existe una copia en local, entonces se carga desde la cache.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 26/11/2012, 12:58
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Respuesta: src desde cache ¿es posible?

Es lo que estaba haciendo, pero la imagen se descarga una y otra vez, es decir, no utiliza la cache y hace peticiones al servidor, lo he monitorizado con la herramienta network de chrome. :(
  #4 (permalink)  
Antiguo 26/11/2012, 13:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: src desde cache ¿es posible?

quizás porque al momento de agregar la imagen al estilo, el objeto Image no ha finalizado de cargar la imagen. intenta hacerlo de forma lineal en la consola y monitoreando la transferencia en Network. hay otros detalles adicionales que afecta la cache. por ejemplo, tienes que analizar si el servidor web no admite cachear los recursos. también puede afectar la configuración del navegador.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 26/11/2012, 13:58
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Respuesta: src desde cache ¿es posible?

Me refiero a que hace peticións, es decir, ese "frame" se llama por ejemplo cada vez que se pulse una tecla, ademas con la misma herramienta de network de chrome, veo que al reiniciar la pagina el frame se ha cargado completamente, por que veo la petición al servidor. por parte de este, mi configuracion .htmacces permite cachear el formato de archivo que le estoy enviando es decir, en este caso un gif.


De todas maneras te agradezco tus respuestas, después de todo si chrome hace las peticiones al servidor en vez de pillar de la cache, tendrá alguna razón para hacerlo.Voy a hacer algunas pruebas más y posteare los resultados.
  #6 (permalink)  
Antiguo 26/11/2012, 14:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: src desde cache ¿es posible?

no se que te refieres con "frame". evidentemente no te refieres a <iframe> ni sus pares. ¿la URL que carga siempre es la misma? ¿la imagen es generada en el servidor? en todo caso, intenta ver el resultado que produce el siguiente script.

Código:
var ImagenPrueva = new Image();
ImagePrueva.onload = function(){
document.getElementById('IdDondeQuieroLaImagenDeFondo').style.backgroundImage = 'url('+ this.src +')';

};
ImagenPrueva.src = "/Imagenes/Sprite.gif";
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 26/11/2012, 14:05
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: src desde cache ¿es posible?

El ejemplo me parece un poco rebuscado, tendrías que hacerlo asi para lograr una background

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. /* script */
  10. var ImagenPrueva = new Image();
  11. ImagenPrueva.src = "mapa.jpg";
  12. ImagenPrueva.onload = function(){
  13. document.getElementById('capa').style.backgroundImage = "url("+this.src+")";
  14. }
  15. //]]>
  16. </head>
  17. <div style="width: 400px;height:339px;" id="capa">
  18. </div>
  19. </body>
  20. </html>

Si la intención es cambiar la imagen de fondo, usar la ruta y no crear un nuevo objeto imagen

Con respecto a la caché no tenés que hacer nada desde el javascript, si querés optimizar el rendimiento tenes que pasar un header para fijar un tiempo de expiración largo (a no ser que explicitamente quieras lo contrario), lo recomendable es hacerlo desde el server, por ejemplo en apache
1año
Código Apache:
Ver original
  1. <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf|woff|eot|svg|ttf|flv|swf)$">
  2.     Header set Cache-Control "public, max-age=29030400"
  3. </FilesMatch>

todos los elementos se guardan en la cache del navegador, la diferencia está en si el navegador va a leer el archivo desde ahi ó va a buscar una copia "fresca" en el servidor

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 26/11/2012, 14:30
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: src desde cache ¿es posible?

Si la intención es leer desde la caché, también podrías probar la api Offline Application Cache de html5. Claro que dependerá de cómo lo aplique cada navegador, pero en teoría el navegador, una vez que interpreta el archivo .manifest guarda los elementos en él indicados para leerlos desde esa zona de almacenamiento de manera preferencial.
Un ejemplo para testear con Firebug:
http://cachemanifest.heroku.com/clock.html
Claro que luego, si querés hacer algún cambio en alguna de las fuentes indicadas en el archivo .manifest deberás modificar "algo", aunque sea un caracter en el archivo .manifest (normalmente se coloca un comentario con el nro de versión, Ej: #V1, y es eso lo que se modifica).
  #9 (permalink)  
Antiguo 26/11/2012, 15:44
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Respuesta: src desde cache ¿es posible?

Me siento alagado y privilegiado, 3 cerebros expertos en JS a mi rescate! , bueno vamos por partes y en orden :

Cita:
Iniciado por zerokilled Ver Mensaje
¿la URL que carga siempre es la misma? ¿la imagen es generada en el servidor?
De hecho la URL que meto en backgroundImage es siempre la misma, la imagen se llama desde el server.

Al cargar la pagina, veo que la imagen se carga perfectamente, con la herramienta network de chrome puedo ver que la petición esta finalizada.


Cita:
Iniciado por emprear Ver Mensaje
El ejemplo me parece un poco rebuscado, tendrías que hacerlo asi para lograr una background
Me resulta a veces una ardua tarea incluso mediante el lenguaje escrito, describir una situación concreta, esta situación se resume en que, yo desconocía si era posible manejar la cache de forma manual.

Cita:
Iniciado por emprear Ver Mensaje
Si la intención es cambiar la imagen de fondo, usar la ruta y no crear un nuevo objeto imagen
No es cambiar una imagen de fondo, eso es plausible desde CSS simple, lo que yo quiero es que no haya un retardo entre que se hace la petición al server y se recibe y se descarga la imagen al cliente, en ese intervalo se me jode el "frame", defino frame como un conjunto de .gif que llevan acabo una animación.


Cita:
Iniciado por emprear Ver Mensaje
Con respecto a la caché no tenés que hacer nada desde el javascript, si querés optimizar el rendimiento tenes que pasar un header para fijar un tiempo de expiración largo (a no ser que explicitamente quieras lo contrario), lo recomendable es hacerlo desde el server, por ejemplo en apache
1año
Código Apache:
Ver original
  1. <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf|woff|eot|svg|ttf|flv|swf)$">
  2.     Header set Cache-Control "public, max-age=29030400"
  3. </FilesMatch>

todos los elementos se guardan en la cache del navegador, la diferencia está en si el navegador va a leer el archivo desde ahi ó va a buscar una copia "fresca" en el servidor

Saludos
Afirmativo, mi configuracion .htmlacces para la cache de imagenes es esta :

Código:
<FilesMatch "\.(jpg|png|cgc|bpm|gif|flv|svg)$">
Header set Cache-Control "max-age=10000"
Es decir, una expiración de un par de horas.

Cita:
Iniciado por Panino5001 Ver Mensaje
Si la intención es leer desde la caché, también podrías probar la api Offline Application Cache de html5. Claro que dependerá de cómo lo aplique cada navegador, pero en teoría el navegador, una vez que interpreta el archivo .manifest guarda los elementos en él indicados para leerlos desde esa zona de almacenamiento de manera preferencial.
Un ejemplo para testear con Firebug:
http://cachemanifest.heroku.com/clock.html
Claro que luego, si querés hacer algún cambio en alguna de las fuentes indicadas en el archivo .manifest deberás modificar "algo", aunque sea un caracter en el archivo .manifest (normalmente se coloca un comentario con el nro de versión, Ej: #V1, y es eso lo que se modifica).
Lo tengo muy encuenta y gracias por tu recomendación.
  #10 (permalink)  
Antiguo 26/11/2012, 16:29
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: src desde cache ¿es posible?

Bien @Albuss, esto ya es algo más concreto, una secuencia de imágenes animadas x javascript y evitar un posible parpadeo. Para solucionar eso lo correcto es hacer la correspondiente precarga de imágenes antes de hacer la animación. Poco se relaciona con la caché, porque siempre estás epuesto a que la misma sea borrada por el cliente. Por supuesto que el correcto cacheo te va a beneficiar en futuras reproducciones.
La precarga es muy sencilla ya sea con javascript ó con css poniendo las imágenes en una capa no visible.

este es un ejemplo algo "grosero", va a tardar la carga inicial debido a la cantidad de cuadros de la animación (que más parece emular un video), pero como verás la animación aparece fluida, si refrescás la página, la animación se reproduce instantáneamente ya que todas las imágenes están en la caché

http://foros.emprear.com/javascript/anim/anim2.html

Al buen dato aportado por @panino5001 (siempre se me pasan por alto las nuevas cosas que incorpora html5) te sumo otra, localStorage, si bien no admite imágenes, estas pueden der pasadas a base64 (soportado por todo incluso IE8)
Demo:

http://foros.emprear.com/html5/webst...orage_img.html
ver código fuente para detalles

Una recomendación final, todas esas herramientas de análisis tomalas con pinzas, sobre todo el page speed de Chrome

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 26/11/2012, 16:38
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Respuesta: src desde cache ¿es posible?

Gracias!, Por cierto, me dejaste con la intriga, tenia a google en un pedestal precisamente por cosas como la herramienta Network.
  #12 (permalink)  
Antiguo 26/11/2012, 17:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: src desde cache ¿es posible?

Cita:
Iniciado por Albuss Ver Mensaje
Gracias!, Por cierto, me dejaste con la intriga, tenia a google en un pedestal precisamente por cosas como la herramienta Network.
No es que no sirvan, solo digo que hay que tomarlas con cuidado ciertas cosas, por ejemplo, visitá el ejemplo que te dejé de localstorage y el page speed te señala esto

Introducir recursos CSS en el encabezado del documento

Mover bloques de estilo en línea y elementos <link> del cuerpo al encabezado del documento mejora el rendimiento de la representación.
Más información

Sugerencias para esta página

Incluir recursos CSS en el cuerpo del documento afecta negativamente al rendimiento de la representación
http://foros.emprear.com/.../local_storage_img.html incluye los siguientes recursos CSS en el cuerpo del documento:
Es necesario mover 1 bloque(s) de estilo del cuerpo del documento al encabezado.


Decime vos dónde tengo algún estilo definido en la página?

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: cache, image, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:44.