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 :

Problème de performance (très lent)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Par défaut Problème de performance (très lent)
    Tout d'abord, je dois vous prévenir que je suis encore assez novice dans la programmation en php

    Voici mon problème.
    J'ai développé une application qui permet de gérer les chargements des camions dans mon entreprise.
    Les ventes encodent les commandes 1 par 1 et le magasin complète le tout au fur et à mesure de l'avancement du travail. La vue au niveau magasin est sous la forme d'un formulaire par livraison, ce qui peut représenter plus de 200 formulaires affichés les uns en dessous des autres (il n'y a que les livraisons de la semaine qui apparaissent).

    Je ne connais absolument pas les besoins en ressource d'un serveur PHP, ni d'une station "cliente", toujours est-il que lorsqu'on affiche la page contenant tous ces formulaires, il faut facilement 2-3 minutes avant que tout ne soit charger et pendant ce temps, le PC est à 100% d'utilisation du CPU. Si on valide des formulaires, ça peut prendre plus de 5 minutes avant qu'elle ne soit accessible à nouveau.

    Est-ce que quelqu'un peut m'aider, car ça devient très problématique ?

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ah les perfs....
    Il faut tout d'abord que tu détermine le bottleneck :
    - est-ce les requêtes à la db qui prenent du temps ?
    - est-ce le traitement php ?

    Pour ça je te suggère d'utiliser l'exemple 568 pour détecter la portion de code qui prend du temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $time_start = microtime_float();
     
    $res = mysql_query('SELECT * FROM formulaires WHERE ....');
     
    $time_end = microtime_float();
    echo '<b>La requête a pris '. $time_end - $time_start .' secondes</b>';
    ?>

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Par défaut
    Merci beaucoup.

    Lorsque j'affiche le temps d'exécution de ma requete qui va chercher les données dans la table, ça me donne : -1175087155.61 secondes.

    Une valeur négative ???

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Fais voir le bout de code en question ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Par défaut
    Voici une partie du code, parce que le reste (càd la création des formulaires) est très très long.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function encodageWh()
    {
      require_once('././Modeles/delivery.class.php'); //Appel de la fonction qui ramène les données du la db
     
      $time_start = microtime_float();
      $myDelivery=new Delivery();
      $tableau=$myDelivery->getDeliveries();
      $time_end = microtime_float();
      echo '<b>La requête a pris '. $time_end - $time_start .' secondes</b>';
    ...
    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
    <?php
    //Sélection des données de la db
    require_once('connexion.class.php');
     
    class Delivery
    {
     
      var $connexion;
      var $week;
      var $customer;
      function Delivery()
      {
        $this->connexion = new Connexion();
        $this->week = date("W");
      }
     
      function getDeliveries()
      {
        $requete=mysql_query("SELECT * FROM delivery INNER JOIN customers ON delivery.customer_id = customers.id INNER JOIN users ON delivery.user_id = users.id where week >= '.$this->week.' order by prepa_date, load_date, load_time, name, od;");
        $total=array();   
        while ($resultat=mysql_fetch_object($requete))
        {
          array_push($total,$resultat); 
        }
        return($total);
      }

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Elle est définie où la fonction microtime_float() ?

  7. #7
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ok. peux tu remplacer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function encodageWh()
    {
      require_once('././Modeles/delivery.class.php'); //Appel de la fonction qui ramène les données du la db
     
      $time_start = microtime_float();
      $myDelivery=new Delivery();
      $tableau=$myDelivery->getDeliveries();
      $time_end = microtime_float();
      echo '<b>La requête a pris '. $time_end - $time_start .' secondes</b>';
    ...
    Par ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function encodageWh()
    {
      require_once('././Modeles/delivery.class.php'); //Appel de la fonction qui ramène les données du la db
     
      $time_start = microtime_float();
    var_dump($time_start);
      $myDelivery=new Delivery();
      $tableau=$myDelivery->getDeliveries();
      $time_end = microtime_float();
    var_dump($time_end);
      echo '<b>La requête a pris '. $time_end - $time_start .' secondes</b>';
    ...
    Quel est le résultat des deux var_dump ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2014, 11h26
  2. Réponses: 3
    Dernier message: 31/01/2012, 07h45
  3. [Performance Swing] Deplacement de JInternalFrame très lent
    Par Widiwi dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/02/2009, 00h38
  4. [performance] Query très lent
    Par eponette dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/03/2006, 09h57
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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