2013-07-07 8 views
2

Comment charger ces images plus rapidement? J'ai une boucle qui affiche des images de profils et les photos prennent de 1 à 2,5 secondes pour charger. Pas l'un après l'autre mais à peu près tout à la fois. J'ai essayé de redimensionner avec PHP mais cela n'a vraiment rien changé. Je ne suis pas sûr de savoir comment je peux précharger ces images avec une telle boucle. Que puis-je faire pour augmenter la performance de la charge?Comment charger des images plus rapidement?

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; 

J'ai aussi des contrôles d'extension comme "si déclarations" mais ceux qui ne peuvent pas le ralentir autant.

+0

À quoi ressemble le reste de la page html? Avez-vous beaucoup de fichiers css ou javascript? Le changeur de sorts n'en chargera que plusieurs à la fois et si vous en avez trop, ils devront tous être téléchargés avant que les images ne commencent à charger. Vous pouvez utiliser la chronologie du réseau dans les outils de développement ou les plugins de votre navigateur pour voir quand chaque URL est téléchargée et combien de temps cela prend. –

+0

Aussi, en général, c'est une mauvaise idée de faire ''. Au lieu de cela, vous devriez faire ' '. Static fichiers peuvent être mis en cache par le serveur et le navigateur et peut-être même l'ISP du visiteur.Les fichiers PHP sont très difficiles à mettre en cache –

Répondre

4

Cette partie

$image = imagecreatefromjpeg('userphotos/'.$photoid.''.$ext.''); 
    $imagearray = imagejpeg($image, null); 

ne devrait pas être nécessaire * et va être lourd sur le serveur. Vous chargez (décodage) et enregistrez (ré-encodage) l'image sans raison apparente.

Utilisez quelque chose comme fpasshtru():

$name = 'userphotos/'.$photoid.''.$ext.''; 
$fp = fopen($name, 'rb'); 

header('Content-type: image/jpeg'); 

fpassthru($fp); 

Ou tout simplement un lien direct à l'image. À moins que vous n'effectuiez des contrôles de sécurité ou quelque chose, ou que les images soient stockées en dehors de la racine Web, il n'est pas nécessaire de passer par PHP ici.

* = sauf si vous avez un cas d'utilisation très spécifique comme la suppression des données EXIF ​​des images stockées. Dans ce cas, vous devez utiliser une forme de mise en cache.

+0

Je ne suis pas sûr de ce que mon processus de pensée était quand je l'ai fait code mais je viens de me connecter directement aux photos et c'est très rapide maintenant. – user2127833

0

Actuellement, vous chargez des données d'image du disque dans un tampon d'image, qui est validé par PHP. Après cela, vous réencodez les données d'image dans un tampon d'image jpg à nouveau et le sortir. Ceci est inutile. Vous pouvez simplement charger un thruput le fichier (lire à propos de fpassthru). Ceci est également beaucoup plus efficace sur le plan de la mémoire, car l'image n'a pas besoin d'être entièrement chargée en mémoire à la fois.

Ce sera beaucoup plus rapide, mais il peut être encore plus rapide, car je pense que vous pouvez utiliser .htaccess pour rediriger une URL avec un ID d'image à l'image réelle. Vous n'avez même pas besoin de PHP pour ça.

Questions connexes