2

これらの画像の読み込みを速くするにはどうすればよいですか? プロフィール写真を表示するループがあり、写真の読み込みに 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ステートメント」として拡張チェックもありますが、これほど遅くなることはありません。

4

2 に答える 2

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 データを削除するなど、非常に特殊な使用例がない限り。その場合、何らかの形式のキャッシングを使用する必要があります。

于 2013-07-07T22:03:09.273 に答える
0

現在、イメージ データをディスクからイメージ バッファにロードしています。これは PHP によって検証されます。その後、画像データを再度 jpg 画像バッファにエンコードし直して出力します。これは無駄です。ファイルのスループットをロードするだけです(fpassthruについて読んでください)。これは、イメージを一度に完全にメモリにロードする必要がないため、メモリ効率も大幅に向上します。

.htaccessそれははるかに高速ですが、画像IDを持つURLを実際の画像にリダイレクトするためだけに使用できると思うので、さらに高速になる可能性があります. そのためにPHPさえ必要ありません。

于 2013-07-07T22:06:51.210 に答える