如何更快地加载这些图像?我有一个显示个人资料图片的循环,照片需要1到2.5秒才能加载。不是一个接一个,而是几乎同时发生。我试着用PHP重新调整大小,但这并没有真正改变什么。我不知道如何用这样的循环预加载这些图像。我可以做些什么来提高负载性能?
PHP
$query = "SELECT `photoid` FROM `site`.`photos` WHERE `profileid`='$profileid'";
try{
$getphotos = $connect->prepare($query);
$getphotos->execute();
while ($array = $getphotos->fetch(PDO::FETCH_ASSOC)){
echo '<div id="photo"><img src="photoprocess.php?photo='.$array['photoid'].'"></div>';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
CSS
#photo img {
max-width:100%;
max-height:100%;
}
photoprocess.php
$photoid = $_GET['photo'];
$query = "SELECT `ext` FROM `site`.`photos` WHERE `photoid`='$photoid'";
try{
$getphotos = $connect->prepare($query);
$getphotos->execute();
$array = $getphotos->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo $e->getMessage();
}
$ext = $array['ext'];
$image = imagecreatefromjpeg('userphotos/'.$photoid.''.$ext.'');
$imagearray = imagejpeg($image, null);
header('Content-type: image/jpeg');
echo $imagearray;
我也有扩展检查作为"if语句",但这些不会减慢它的速度。
本部分
$image = imagecreatefromjpeg('userphotos/'.$photoid.''.$ext.'');
$imagearray = imagejpeg($image, null);
不应该是必要的*并且会对服务器造成沉重负担。您加载(解码)和保存(重新编码)图像没有明显的原因。
使用类似fpasshtru()
:的东西
$name = 'userphotos/'.$photoid.''.$ext.'';
$fp = fopen($name, 'rb');
header('Content-type: image/jpeg');
fpassthru($fp);
或者直接链接到图像。除非你做了一些安全检查或其他什么,或者图像存储在web根目录之外,否则根本不需要在这里使用PHP。
*=除非您有一个非常具体的用例,比如从存储的图像中删除EXIF数据。在这种情况下,您应该使用某种形式的缓存
当前,您正在将磁盘中的图像数据加载到图像缓冲区中,该缓冲区经过PHP验证。之后,再次将图像数据重新编码到jpg图像缓冲区并输出。这没用。您只需加载一个thruput文件(阅读fpassthrough)。这也提高了内存效率,因为图像不需要一次完全加载到内存中。
这会快很多,但也会更快,因为我认为你可以只使用.htaccess
将带有图像id的url重定向到实际图像。你甚至不需要PHP。