【发布时间】:2014-07-18 23:03:40
【问题描述】:
我在数据库中有很多图像。图像数据存储在带有 id 的二进制列中。我编写了一个 PHP 脚本来读取这些数据并输出正确的 Content-type 和数据。
每当我想在页面上显示图像时,我都会将 /image.php?id=1 放在图像标签的 src 字段中,其中 1 是数据库中图像的 ID。这一切都很好。
现在每次我再次访问该页面或使用 javascript 修改某些图像的 src 时,似乎都会再次从服务器加载该图像。例如,我有一张图片:<img src="/image.php?id=4" />。当我将鼠标悬停在此图像上时,我使用 javascript 将 src 动态更改为 /image.php?id=5。这会导致从服务器再次加载图像,这需要 1 到 3 秒。在文档开头使用像素大小的图像预加载此图像不起作用。我猜这是因为我实际上是在查询一个动态 PHP 脚本。
如果它们具有相同的ID,有什么方法可以让浏览器缓存图像?我的数据库中的图像 ID 很少会改变,如果有的话。
任何帮助将不胜感激。
【问题讨论】:
-
预加载方法必须有效。
-
我不相信你可以缓存任何带有“查询参数”的东西
-
使用路径而不是查询参数(提示:mod_rewrite)并将其用作图像源。
-
您可能需要发送适当的 HTTP 缓存标头来告诉浏览器缓存图像多长时间。不过,为什么要将图像存储在数据库中?根据我的经验,这是一种糟糕的代码气味。
-
@AlexandruG。你应该把它写成答案,它有效。我从来没想过……
标签: javascript php image caching dynamic-content