防止在Silverlight中缓存特定的图像

本文关键字:图像 缓存 Silverlight | 更新日期: 2023-09-27 18:05:15

最近发现我的项目正在缓存图像。这是一个问题,因为用户可以上传一个新的图像,这不会得到反映,直到浏览器关闭和重新加载(至少在IE调试时)。我不想为了没有改变的东西而一遍又一遍地重新下载图像,因为这会大大增加我们发送的数据。

我已经在这里和这里尝试了一些解决方案2

共同的因素似乎是显示的变量开始时是干净的。但这两种方法都不适合我。

我实际上是以两种不同的方式显示图像。

1)我取一个字符串并将其传递到<Image />

的源

2)我将字符串转换为URI并将其转换为幕后的位图,然后传递到<Image />的源

当图像在服务器端更新时,用户图像的位置保持不变,只有数据改变。

做服务器端工作的程序员也尝试了一个解决方案。他说他实现了一些缓存阻止头,结果是第一次请求图像更新后,它检索一个新的图像并显示它。然而,任何其他将显示图像的地方都不会得到更新。

我想我的理想解决方案是,一旦用户上传了新图像,我实现了一些东西,通知任何使用该特定URI抓取新版本的人。

有人知道如何选择性地停止缓存吗?

防止在Silverlight中缓存特定的图像

我会尝试在您请求的图像的Uri中添加时间戳,这应该有助于阻止浏览器(或任何代理)缓存

。http://www.example.com/myimage.jpg?ts=2011081107333454

首先让我们澄清有点模糊的术语"缓存"。

我们一直在做各种缓存。每当我们获取一个昂贵操作的结果并存储该结果以供将来使用,以避免重复昂贵的操作时,我们实际上就是在"缓存"。包括Silverlight在内的所有框架也将大量地做这类事情。

然而,每当在基于Web的应用程序的上下文中使用术语"缓存"并指使用HTTP获取的资源时,就会想到特定的HTTP缓存规范。这不是不合理的HTTP缓存显然起着重要作用,在服务器上正确设置响应头对于正确操作很重要。

HTTP资源缓存的一个经常被忽略的方面是,兑现缓存头的责任只在于HTTP堆栈本身,而不在于应用程序使用HTTP甚至知道任何关于缓存的事情。

如果应用程序选择维护自己的uri"缓存",以从HTTP堆栈请求资源,则不需要实现HTTP兼容的缓存算法。如果这样的"缓存"被要求提供与指定Uri匹配的特定应用程序对象,则完全可以自由地这样做,而无需引用HTTP。

如果HTTP缓存是唯一需要担心的缓存,那么假设你的"服务器编码器"实际上已经正确设置了缓存头,那么一切都应该很好。但是,仍然可能涉及到应用层缓存。

ultimate rob的建议在这种情况下是有意义的,你用一个查询字符串值"版本"uri。然而,这不是为了防止缓存,在应用程序和http级别进行缓存是一件好事,它是为了确保完整Uri引用的资源始终是所需的内容。