2009-08-14 7 views
0

J'ai une fonction en PHP qui redimensionne les images dans une vignette, mon script de téléchargement d'image prend une image téléchargée et exécute cette fonction pour redimensionner l'image si elle est plus large que 700px puis exécute également la fonctionner 2 fois de plus pour créer 2 images miniatures de taille différente, donc il y a un total de 3 images enregistrées chaque fois qu'un utilisateur télécharge une image. Ma fonction redimensionner/vignette est appelée 2 fois pour les vignettes et une 3ème fois occasionnelle si le fichier est trop large en dimensions. Maintenant cette fonction de redimensionnement utilise getimagesize() pour obtenir les dimensions, donc mon script uplaod appelle cette fonction, puis la fonction de redimensionnement utilise 2-3 fois plus la fonction getimagesize() pour faire d'autres images de taille.Question sur la performance des vignettes d'image en PHP

Je pense que je devrais juste passer les dimesions sur la fonction de redimensionnement depuis que je les ai dans le processus de téléchargement? Ma vraie question est, est getimagesize() une ressource affamée de ressources, serait-il préférable de l'utiliser au moins comme possible ou l'appelle plusieurs fois quand 1 image est bien téléchargée?

Répondre

3

Juste un conseil/precausion, je vous asssume vous utilisez les fonctions de GD. Lors de la création de plusieurs vignettes, le goulot d'étranglement habituel est une mise en œuvre incorrecte des fonctions de redimensionnement de l'image - chaque fois que vous lisez l'image d'origine, puis enregistrez la taille redimensionnée. Une meilleure façon est de charger l'image une fois, et d'utiliser la ressource image pour faire toutes les vignettes avec imagecopyresampled - ne pas seulement passer les dimentions de l'image à la fonction - passer aussi la référence GD.Thay façon que votre fichier original est chargé qu'une seule fois.

+0

Merci c'est ce que je pensais faire – JasonDavis

2

Pour quelque chose qui fonctionne seulement sur le téléchargement, cela ne devrait pas déranger autant. Le téléchargement n'est pas une action où l'utilisateur attend une réponse super rapide. L'optimisation prématurée est la racine de tous les maux. Cela étant dit, getimagesize() n'est pas particulièrement coûteux, mais si vous pouvez l'appeler une seule fois le faire. Mais je ne prédis pas que beaucoup de vitesse augmente. La partie la plus coûteuse de votre script est le redimensionnement de l'image.

1

Ce n'est pas particulièrement gourmand en ressources - il doit ouvrir un fichier et lire l'en-tête de l'image. Ne faites pas tout ce que vous pouvez pour l'optimiser - si c'est facile, faites-le. Sinon, attendez et voyez où se trouvent les vrais goulots d'étranglement dans votre application avant d'optimiser.

0

La meilleure chose à faire est de profiler vos scripts.

Au lieu de réponses théoriques qui peuvent ne pas s'appliquer à une situation spécifique, vous obtenez une vraie réponse et c'est vraiment instructif.

De plus, avec cette habitude, vous pourrez:

  • découvrir les goulots d'étranglement
  • faire la différence entre un micro optimisation et une optimisation majeure.

Personnellement, je dev. sur Windows et déployer sur * nix.

Sur ma dev dox, j'utilise xdebug + WinCacheGrind pour lire les résultats.

Je ne pourrais pas vivre sans eux. :)

http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/

0

Je ne pense pas que la partie de téléchargement devrait être où vous redimensionnez l'image. Vous devez redimensionner l'image ultérieurement comme travail cron. Vous pouvez utiliser une application tierce comme imagemagick ou une autre application de redimensionnement pour redimensionner les images. De cette façon, vous gagnez du temps sur le front end. Vous pouvez exécuter le travail de redimensionnement toutes les 5 minutes environ.

+0

J'ai considéré ceci – JasonDavis