如何让这些图像加载更快?我有一个显示个人资料图片的循环,照片需要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语句”,但那些不能减慢这么多。
答案 0 :(得分:4)
这部分
$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数据。在这种情况下,您应该使用某种形式的缓存。
答案 1 :(得分:0)
目前,您正在将图像数据从磁盘加载到图像缓冲区中,该缓冲区由PHP验证。之后,再次将图像数据重新编码为jpg图像缓冲区并输出。 这没用。您只需加载文件的thruput(阅读fpassthru)。这也是更高的内存效率,因为图像不需要一次完全加载到内存中。
这样会更快,但速度更快,因为我认为你可以只使用.htaccess
将带有图片ID的网址重定向到实际图片。你甚至不需要PHP。