IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Temps d’exécution très lent


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 35
    Points
    35
    Par défaut Temps d’exécution très lent
    Bonjour à tous.

    Je réalise une appli de traitement d'image dont le fonctionnement (en résumant) est le suivant :
    - j'applique des filtres sur une photo coté client en javascript
    - j'enregistre en bdd les filtres qu'il a appliqué
    - un script applique les mêmes filtres coté serveur sur la même image mais en plus grand résolution.

    Tout fonctionne bien, sauf que le script coté serveur est vraiment très, très lent ! Il lui faut plus de 1 min pour effectuer le traitement, alors que la résolution de l'image n'est pas non plus enorme (1843x1252) et que je suis sur un serveur dédié (avec ssd).

    Et ce qui est étrange c'est que 1 filtre = ~60s mais 2 filtres sur la même images est à peine plus long.

    Les algos des filtres sont normalement bons, je les ai transposé de javascript à php.

    Je me demande donc si je ne les applique pas d'une mauvaise façon ?

    voici pour exemple le code d'un filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public function vibrance($fVibrance)
    	{
    		for($x = 0; $x < $this->w; ++$x)
    		{
    			for($y = 0; $y < $this->h; ++$y)
    			{
    				$rgb     = imagecolorat($this->image, $x, $y);
    				$colors  = imagecolorsforindex($this->image, $rgb);
     
    				$iR = $colors['red'];
    				$iG = $colors['green'];
    				$iB = $colors['blue'];
     
    				$max = max($iR, $iG, $iB);
    				$avg = ($iR + $iG + $iB) / 3;
    				$amt = ((abs($max - $avg) * 2 / 255) * $fVibrance) / 100;
    				if ($iR !== $max) $iR += ($max - $iR) * $amt;
    				if ($iG !== $max) $iG += ($max - $iG) * $amt;
    				if ($iB !== $max) $iB += ($max - $iB) * $amt;
     
    				$iR = $iR < 0 ?0:($iR > 255 ?255:$iR);
    				$iG = $iG < 0 ?0:($iG > 255 ?255:$iG);
    				$iB = $iB < 0 ?0:($iB > 255 ?255:$iB);
     
    				$color   = imagecolorallocate ($this->image, $iR ,$iG ,$iB );
    				imagesetpixel($this->image, $x, $y, $color);
    			}
    		}
    	}

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    La bibliothèque GD n'est pas réputée pour être particulièrement véloce, mais bon 60s pour un filtre ça me paraît beaucoup.
    Tu peux faire des bench à différentes étapes de ton processus pour voir ce qui prend le plus de temps, ça te permettras de mieux cibler le problème.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 370
    Points
    1 370
    Par défaut
    Si j'ai bien compris $->w = 1843 et $->y = 1252 et comme tes deux boucles sont imbriquées l'une dans l'autre, tu réalise le traitement qui est à l'intérieur 2 307 436 fois... C'est normal que ça prenne un peut de temps.

    Essaie avec une image de 20 x 20 juste pour voir, si le résultat est à peu près identique, c'est que le problème vient d'ailleurs.

Discussions similaires

  1. [huffmandeco] Temps d’exécution très long
    Par khaled igou dans le forum Images
    Réponses: 12
    Dernier message: 30/03/2013, 21h10
  2. temps d'exécution très lent pour les boucles for
    Par NELLLY dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/01/2013, 11h00
  3. Réponses: 22
    Dernier message: 28/11/2010, 12h25
  4. Temps d'exécution très lent
    Par michelin123 dans le forum MATLAB
    Réponses: 14
    Dernier message: 20/11/2007, 15h17
  5. Temps d'execution très lent
    Par bahiatoon dans le forum C++Builder
    Réponses: 16
    Dernier message: 19/07/2007, 23h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo