预加载图片以进行刷新、缓存


Preloading pictures for refresh, cache

我有两个php变量:$img1src$img2src,(它们是PHP无关紧要的,因为您可以在任何地方回显php变量)它们都包含图像的URL。我想知道我是否能够预加载这些图像或缓存它们。

我的目标是:当有人刷新页面时,我希望这些图片立即出现在<img src >中。

我不打算提供具体的代码,因为我不想给你一条鱼,而是展示谷歌是如何成为一根鱼竿的。

我用谷歌搜索"php cache images tutorial"只是为了看看会发生什么。下面是一个很棒的资源。

http://dtbaker.com.au/random-bits/how-to-cache-images-generated-by-php.html

没有比这更好的了。

缓存

图像并不是PHP的工作。应该使用 PHP 来决定是否显示它。(你可以用PHP做一些缓存的事情,但不是在同一意义上。本质上,您要做的是让客户端浏览器请求第二个图像。一旦浏览器获得图像,它应该在标头中自动发送"if-modified-by"参数。下次加载页面时,响应代码应为 304,并且图像应立即加载。您可以从多种方式中进行选择。在页面加载后使用 javascript 加载图像(以防止额外的加载时间),或者您可以只包含一个隐藏在页面上某个位置的图像标签。

我也没有测试过它,但你可以直接向映像发送 ajax 请求。我不确定这种方式是否会缓存它。

编辑:这不是最优雅的解决方案,但它应该传达这个想法。

JS示例:

<?php
session_start();
if (!isset($_SESSION['graphic'])) $_SESSION['graphic'] = "http://www.tomsfreelance.com/laptop/DSC_0011.JPG";
else $_SESSION['graphic'] = "http://www.tomsfreelance.com/laptop/DSC_0012.JPG";
?>
<html>
<head>
<script>
function loadImage() {
    document.getElementById('preload').style.backgroundImage = "url(http://www.tomsfreelance.com/laptop/DSC_0012.JPG)";
}
</script>
</head>
<body onload="loadImage();">
<div id="preload" style="display: none;"></div>
<img src="<?php echo $_SESSION['graphic'];?>">
</body>
</html>

当然可以,试试这个javascript

var image1 = new Image(), image2 = new Image();
image1.src = <?php echo $img1src; ?>;
image2.src = ?<php echo $img2src; ?>;

这应该预加载图像,因此当您将img标签附加到DOM时,图像应该立即出现。

如果您的目标是总体上减少 http 请求:您可以尝试 CSS 精灵和/或数据 URL 方法来显示这些图像。 当图像较小时,这些方法将是最有效的。