Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1259 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Limiter la charge d'un serveur PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Limiter la charge d'un serveur PHP

n°2075790
phaerandel​l
Posté le 13-05-2011 à 14:20:39  profilanswer
 

Bonjour à tous,
j'ai eut beau chercher sur pas mal de site et trouvé quelque infos utilies, rien qui puisse véritablement répondre à mon problème. J’espère donc que vous pourrez m'aider. Voilà le topos :
 
Je dois effectuer des calcul (assez importants) sur des donnés présente en base SQL et simplement afficher le résultat.
Une solution que j'ai envisagé pour limiter la charge du serveur php est de faire faire les calculs coté client via javascript, ce qui nécessite la création automatique par PHP du code javascript (via des echo dans les balises <script></script> ) pour générer la structure de donnée. Ca donne un truc dans le genre :
 

Code :
  1. <script type="text/javascript">
  2. var ligne_b = <?php echo $sql_select->rowCount(); ?>;
  3. var colone_b = <?php echo $sql_select->columnCount(); ?>;
  4. <?php
  5.    while($data = $sql_select->fetch()){ // va normalement tourner plusieurs centaine de fois
  6.        echo "mon_tableau=new Array(".'$data'.');';
  7.    }
  8. ?>
  9. </script>


 
Le script représente l'idée de ce qui doit être fait et n'est pas correcte j'en suis conscient.
 
Ma question est la suivante :
Qu'est ce qui est le plus lourd pour le serveur PHP ?
 - Faire générer une page de cette manière avec plusieurs centaine d'echo ?
 - Faire faire les calculs (complexité n^4) par PHP et afficher la réponse ?
 
Merci beaucoup.

mood
Publicité
Posté le 13-05-2011 à 14:20:39  profilanswer
 

n°2075792
CyberDenix
Posté le 13-05-2011 à 14:34:26  profilanswer
 

Si tes résultats sont amenés à être réutilisés, il faut utiliser un simple cache fichier, ou mieux, du cache mémoire distribué type memcached.
C'est l'optimisation n°1 à mettre en place. Sans cache, aucun gros site ne peut espérer tourner.
 
Dans tous les cas, il faut utiliser des requêtes préparées (paramétrées) avec PDO, pour que le plan d’exécution de la requête reste le même.
 
Quand à déporter ceci en javascript, je pense que tu compliques trop les choses. écrit une énorme chaine de caractère plutôt que plusieurs echos, et compresse le tout :

Code :
  1. ob_start('ob_gz_handler');
  2. echo $my_big_string;
  3. ob_end_flush(); // ou un truc du style


 
http://www.php.net/manual/en/function.ob-start.php


---------------
Directeur Technique (CTO)
n°2076089
phaerandel​l
Posté le 16-05-2011 à 09:36:53  profilanswer
 

Merci beaucoup pour ta réponse.
Globalement l'idée d'afficher une seul string avec un seul echo marche très bien (0.017s pour générer la ligne depuis une table de 1000 enregistrements contre 0.79 s pour le traitement php). Cependant je n'arrive pas à faire fonctionner la compression j’obtiens une erreur de Firefox 4.0.1 :
 
"Erreur d'encodage de contenu. La page que vous essayez de voir ne peut être affichée car elle utilise un type de compression invalide ou non pris en charge."
 
Autre chose, je ne suis pas sure d'avoir bien saisi le sens de ceci :  

Citation :


Si tes résultats sont amenés à être réutilisés


La/les valeurs à afficher sont des sommes de différences entre des timestamps (des moyennes grosso modo) mais sont juste des indicateurs et n'ont pas votation à être utilisées plus tard (dans d'autre calcules) ni stockés. Alors je me trompe peut être mais le cache serveur ne sera pas vraiment utile dans ce cas là non ?
 
Visiblement le fait de laisser faire les calcules par javascript allège bien la charge sur serveur php qui répond maintenant près de 6 secondes plus vite.
 
Bonne journée.

n°2076215
czh
Posté le 16-05-2011 à 12:47:33  profilanswer
 

phaerandell a écrit :


"Erreur d'encodage de contenu. La page que vous essayez de voir ne peut être affichée car elle utilise un type de compression invalide ou non pris en charge."


 
Il manque probablement un petit header("Content-Encoding: gzip" ); avant d'afficher.
Mais avant de compresser il faut vérifier si le navigateur accepte la compression GZIP. (présence de Accept-Encoding: gzip dans apache_request_headers() ou $_SERVER)

Message cité 1 fois
Message édité par czh le 16-05-2011 à 12:48:21
n°2076313
phaerandel​l
Posté le 16-05-2011 à 15:55:23  profilanswer
 

czh a écrit :

 

Il manque probablement un petit header("Content-Encoding: gzip" ); avant d'afficher.
Mais avant de compresser il faut vérifier si le navigateur accepte la compression GZIP. (présence de Accept-Encoding: gzip dans apache_request_headers() ou $_SERVER)

 

Après vérification que la configuration était correcte ($_SERVER et apache_request_headers() disposent bien tous les deux de Accept-Encoding: gzip).
L'ajout du header ne solutionne malheureusement pas le problème.
Cependant, fait étonnant, le script passe sans problème sur IE 8, mais pas sous firefox 4.0.1 ni sous chrome 11 :

 

Erreur 330 (net::ERR_CONTENT_DECODING_FAILED) : Erreur inconnue


Message édité par phaerandell le 16-05-2011 à 16:03:42
n°2076922
CyberDenix
Posté le 18-05-2011 à 20:09:42  profilanswer
 

Si tu as des erreurs PHP (notice, etc...), la compression peut échouer car un flux d'erreur peut se retrouver au milieu du code de compression. As-tu dans ton php.ini le error_reporting à E_ALL | E_STRICT ?
 
Par rapport à la ré-utilisabilité, effectivement, avec des timestamps, ça va être difficile :D


---------------
Directeur Technique (CTO)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Limiter la charge d'un serveur PHP

 

Sujets relatifs
Problem application client/serveur avec interface graphiquecrystal reports 9 et PHP
[PHP]Protéger l'accès à un fichier php contenant des mots de passeAppeler un php sur un autre serveur (cron)
Recuperation d'informations Telnet avec PHPUpload de fichiers en PHP : corruption des données
[Php/Sql] Problème Order By[PHP] Utiliser 2 requêtes SQL dans 1 boucle ?
[PHP] Recherche script d'enchères 
Plus de sujets relatifs à : Limiter la charge d'un serveur PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR