glide from example cache ios objective-c caching sdwebimage

ios - from - Cómo actualizar la imagen en caché cuando la imagen cambió en el servidor con SDWebImage



kingfisher swift example (4)

Si no se cambia la URL, SDEbImage ahora tiene forma de saber que esa imagen se ha modificado en el servidor.

Estoy usando la biblioteca SDWebImage para descargar imágenes del servidor. https://github.com/rs/SDWebImage

SDWebImage no puede actualizar la imagen en caché cuando la imagen se actualiza en el servidor con la misma URL.


SDWebImage hace un poco de almacenamiento en caché por defecto, por lo que sería mejor utilizar una nueva URL si la imagen cambia. Entonces, por ejemplo, si tiene control sobre la URL y puede cambiarla cada vez que la imagen ha cambiado, puede hacerlo.

Si ese no es el caso, intente usar SDWebImageRefreshCached en el campo de options para respetar los encabezados de control de caché HTTP, como este:

[imageView setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"] placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"] options:SDWebImageRefreshCached];

Ver más aquí


Actualización: en realidad, he escrito una guía completa sobre caché, incluida la validación de caché https://kean.github.io/blog/image-caching

SDWebImage usa NSURLCache cuando establece la opción SDWebImageRefreshCached . El sistema de carga de URL de Apple implementa la memoria caché HTTP, incluida la validación de respuestas en caché. La caché HTTP es bastante compleja, sin embargo, hay muchas guías para principiantes en el almacenamiento en caché HTTP:

Básicamente, el servidor necesita incluir algunos de los encabezados de control de caché HTTP en cada respuesta. Hay muchas estrategias diferentes que se pueden usar para implementar la revalidación. Puede usar Last-Modified o ETag . De esta forma, cada vez que el cliente envía una solicitud, automáticamente incluirá en su solicitud el valor Last-Modified o ETag de la respuesta previamente almacenada en caché. Si la imagen no ha cambiado, el servidor responderá con el código de estado 302 (no modificado) y NSURLConnection/NSURLSession le dará una respuesta en caché de NSURLCache de forma NSURLCache . No tiene que volver a descargar los datos, pero aún necesita consultar con el servidor cada vez que realiza una solicitud.

También puede especificar una fecha de caducidad utilizando el control de caché HTTP. Si se utiliza el mecanismo de caducidad, NSURLConnection/NSURLSession no revalidará la respuesta en caché hasta que no caduque.

Para obtener más información sobre el control de caché HTTP, consulte los enlaces anteriores. La memoria caché HTTP es un mecanismo de caché universal que debe usarse siempre que sea posible.

Yo recomendaría utilizar el marco Nuke para la carga de imágenes (descargo de responsabilidad: escrito por mí). Utiliza NSURLCache de manera predeterminada mientras que todavía tiene una memoria caché que contiene imágenes descomprimidas.


Aquí hay un código en swift 3 para actualizar el caché cada vez

imgCardBack.sd_setImage(with: URL(string: objUserData.back_image!), placeholderImage:UIImage(named: "cardBack"), options: .refreshCached)