php
  • html
  • image
  • 2013-07-07 57 views 2 likes 
    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; 
    

    我也有擴展檢查作爲「如果陳述」,但這些不能放慢這一點。

    +0

    html頁面的其他部分是什麼樣的?你有很多的CSS或JavaScript文件? Breowser一次只能載入很多圖片,如果你有太多的圖片,它們將不得不在圖片下載之前下載。您可以在瀏覽器的開發人員工具或插件中使用網絡時間表來查看每個網址何時下載以及需要多長時間。 –

    +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數據。在這種情況下,您應該使用某種形式的緩存。

    +0

    我不知道我做了什麼代碼,但我直接鏈接到照片,現在非常快,謝謝。 – user2127833

    0

    當前,您正在將磁盤中的圖像數據加載到圖像緩衝區,該圖像緩衝區由PHP驗證。之後,您再次將圖像數據重新編碼爲jpg圖像緩衝區並輸出。 這是無用的。您可以加載文件的輸出(讀取約fpassthru)。這也是更高效的內存,因爲圖像不需要一次完全真正加載到內存中。

    這樣會更快,但速度還可以更快,因爲我認爲您只能使用.htaccess將具有圖像ID的網址重定向到實際圖像。你甚至不需要PHP。

    相關問題