如何使图像加载更快


How to make images load faster?

如何更快地加载这些图像?我有一个显示个人资料图片的循环,照片需要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。