-1

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

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

4

4 回答 4

1

我不会提供具体的代码,因为我不想给你一条鱼,而是想展示google是如何成为鱼竿的。

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

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

没有比这更好的了。

于 2012-04-20T03:59:48.790 回答
0

当然可以,试试这个javascript

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

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

于 2012-04-20T03:09:56.553 回答
0

缓存图像并不是 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>
于 2012-04-20T03:32:49.507 回答
0

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

于 2012-04-20T03:35:37.913 回答