SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
PHP & performances
Forum PHP Paris 2005
Éric Daspet
Plan de la session
● Avant-propos
● Configuration
● Code PHP
● Protocole HTTP
● Récapitulatif
Forum PHP 2005
PHP & performances
perrick penet , ,
Quelle(s) performance(s) ?
● Logiciel : Serveur Web, PHP, SGBD
– Nécessite souvent de l'expertise
● Matériel : processeur, mémoire, disque,
réseau
– Simple à ajouter
● Utilisateur : débit et réactivité
– « Ressenti » difficile à mesurer
La problématique
● Et moi ?
– Quel facteur limitatif ?
– Que sacrifier en retour ?
– Comment y remédier ?
– La performance est-elle
ma priorité ?
Il n'y aura (presque) pas de chiffres
● Peu fiables
● Dépendent :
– De la configuration
– De la charge système
– De votre matériel
– De vos besoins
– De votre applicatif
– etc.
Plan de la session
● Avant-propos
● Configuration
● Code PHP
● Protocole HTTP
● Récapitulatif
Forum PHP 2005
PHP & performances
perrick penet , ,
Mauvaises rumeurs
● Recompiler PHP et Apache depuis les
sources
– Des experts l'ont déjà fait pour vous
– Utile uniquement pour des besoins spécifiques
– Optimisations de compilation négligeables
● Compilation statique (opposé à dynamique)
– Moins souple (module non indépendants)
– Aucune différence en module apache ou FastCGI
Différents modes d'accès
● CGI : utilisé pour suexec
● Module Apache : utilisé pour les performances
● FastCGI : répond à tout ou presque, peu utilisé
CGI Module Apache FastCGI
Processus indépendants ? Oui Non Oui
Serveurs indépendants ? Non Non Oui
Configuration par application ? Non Oui Oui
Performant ? Non Oui Oui
Configuration / optimisation ? Non Commune Apache Oui, par appli.
Utilisateurs indépendants ? Oui Non Oui
Quel serveur Web ?
● Apache
– Éprouvé
– Modules nombreux
● Lighttpd
– Simple
– Rapide
(fichiers statiques)
– Peu gourmand
– http://lighttpd.net/
Forum PHP 2005
PHP & performances
perrick penet , ,
Caches d'opcode
● Pourquoi ?
– Une compilation, plusieurs exécutions
– Optimisation du code
● Les noms à retenir : APC, e-accelerator, Zend
● Les résultats ?
– Calcul pur : faibles ou inexistants
– Applications réelles : gains importants (x2)
Forum PHP 2005
PHP & performances
perrick penet , ,
Quelle configuration Apache ?
● Apache
– Limitez les override (.htaccess)
– Limitez la profondeur des répertoires
– Limitez DirectoryIndex
– Pas de négociation de contenu
– Pas de rewrite
– Autorisez les liens symboliques
– Désactivez les journaux inutiles
– Désactivez la résolution DNS (n'utilisez que des IP)
Forum PHP 2005
PHP & performances
perrick penet , ,
Quelle configuration PHP ?
● Utiliser les limitations propres à PHP si besoin
– max_input_time, max_execution_time, memory_limit
● Retirer l'inutile
– register_long_arrays ($HTTP_*_VARS)
– register_argc_argv
– always_populate_raw_post_data
– magic_quotes_*
– include_path (à limiter au strict nécessaire)
– open_basedir (à limiter ou retirer)
Forum PHP 2005
PHP & performances
perrick penet , ,
Quelle configuration PHP ?
● Les sessions
– Régler la fréquence du ramasse-miette
● Trop lent = gros ralentissement peu fréquent
● Trop rapide = petit ralentissement mais très fréquent
– Désactiver la réécriture d'URL (session.trans_sid)
– Désactiver le démarrage automatique
– Changer le système de stockage (files => mm)
● ou utiliser un système de fichier en mémoire
– Profiter de session.save_path="N;/path"
Réglage des tampons de sortie ?
– Négatif ou positif,
testez *votre* cas
– Diminue le nombre
d'I/O système
● Dans PHP :
– output_buffering
(valeur true ou 4096)
● Dans Apache :
– SendBufferSize
(valeur PageSize)
Forum PHP 2005
PHP & performances
perrick penet , ,
Multiplier les serveurs
● N'hésitez pas à avoir plusieurs serveurs
● Chaque requête est indépendante
– Donc facilement parallélisable
– Aucune configuration spécifique
● Solutions :
– DNS round-robin
– Répartiteur TCP/IP
– Répartiteur HTTP
Plan de la session
● Avant-propos
● Configuration
● Code PHP
● Protocole HTTP
● Récapitulatif
Forum PHP 2005
PHP & performances
perrick penet , ,
Utiliser les fonctions natives
● PHP est lent ... par rapport au C
– Les fonctions proposées par PHP sont codées en C
– PHP en a des milliers : ne réinventez pas la roue
● Exemples :
– file_get_contents(), file_put_contents(), et glob()
– strncmp(), http_build_query()
● PECL a ce qui n'est pas standard
– Classes de gestion HTTP, systèmes de paiement, ...
Forum PHP 2005
PHP & performances
perrick penet , ,
Utiliser les fonctions natives
● Rien ne remplit vos besoins ?
– Utilisez les bibliothèques de votre système
– Créez votre extension PHP avec vos fonctions
– Tout cela est très simple
● PHP sert de colle
– entre le système, les données, les bibliothèques
de traitement, et l'affichage
– ... laissez le reste aux extensions
Astuces de syntaxe
● Références comme
des raccourcis ==>
● Limitez l'accès aux
sessions ou fermez-
les dès que possible
● Passez vous des
regexp quand vous le
pouvez
● Sinon n'utilisez pas
ereg_* mais preg_*
for($i=12; $i<56; $i++)
{
echo $tab['a']['test'][45][$i];
}
------------------------------------
$tmp =& $tab['a']['test'][45] ;
for($i=12; $i<56; $i++)
{
echo $tmp[$i] ;
}
Forum PHP 2005
PHP & performances
perrick penet , ,
Mauvaises idées
● Ne vous fiez pas aux rumeurs d'Internet
– Gains négligeables en performances
● "toto" <-> 'toto'
– Certaines croyances sont fausses
● CONSTANTE <-> $variable
– Pertes importantes en lisibilité / maintenance
● if () { ... } else { ... } <-> ()?(...):(...)
● Ne vous occupez pas trop de la syntaxe
– Vous avez plus à y perdre qu'à y gagner
Accès aux données et SGBDR
● Limitez l'accès au SGBD
– Les fichiers sont souvent plus pertinents
● Optimisez les accès au SGBDR
– Requêtes mal codées et index manquants
– Hiérarchies :
Profilage, savoir quoi optimiser
● La grosse perte de
performances n'est
pas forcément là où
vous croyez
● Vos armes :
– Xdebug
– Kcachegrind
Forum PHP 2005
PHP & performances
perrick penet , ,
Utilisez des caches
● Ne pas refaire un traitement plusieurs fois
– Votre contenu est-il vraiment dynamique ?
● Solutions :
– JPCache et Pear::Cache_Lite
– Cache de requêtes Mysql 4
● Penser à la pré-génération
– Créer des fichiers statiques à la demande
– Utiliser la redirection des erreurs 404
– Effacer régulièrement les vieux contenus
Plan de la session
● Avant-propos
● Configuration
● Code PHP
● Protocole HTTP
● Récapitulatif
Forum PHP 2005
PHP & performances
perrick penet , ,
Utiliser les proxy
● Idée : le proxy appelle une fois la page et
peut la servir à plusieurs personnes
– On déclare si une page est publique ou privée
● header("Cache-Control: public, max-age=3600");
● header("Cache-Control: no-cache, must-revalidate");
– Plusieurs clients d'une même entreprise
= une seule requête
● Attention, avec les sessions PHP déclare
automatiquement des pages « privées »
Forum PHP 2005
PHP & performances
perrick penet , ,
Cache du navigateur
● Idée : ne pas re-télécharger un contenu qui
n'a pas changé depuis la dernière fois
– client : « je veux le contenu s'il a été modifiée »
– serveur : « il n'a pas changé, « code 304 »
– client : « ok, je reprends ma copie en cache »
● Avec PHP :
– $_SERVER['IF_MODIFIED_SINCE']
– $_SERVER["HTTP_IF_NONE_MATCH"]
Cache du navigateur
// on récupère et envoie la date de dernière modification
$modif = gmdate('D, d M Y H:i:s', filemtime($cache_file)) ;
header("Last-Modified: $modif GMT");
// on vérifie si le contenu a changé
$if=substr(@$_SERVER['HTTP_IF_MODIFIED_SINCE'],0,29) ;
if ($date!='' && strtotime($if)>=filemtime($cache_file)) {
header('Not Modified', TRUE, 304);
}
// S'il a changé et si c'est nécessaire, on renvoie le contenu
elseif ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
readfile($cache_file) ;
}
Forum PHP 2005
PHP & performances
perrick penet , ,
Compression
● Idée : transmettre le contenu compressé (zip)
– Réduction du temps d'attente du client
– Gain financier important sur la bande passante
– Taille divisée par 5 à 10
– On utilise 5% de proc pour diviser par 5 le réseau
● Moyen
– Sous Apache : mod_gzip, mod_deflate
– Sous PHP : zlib.output_compression=On
Forum PHP 2005
PHP & performances
perrick penet , ,
Durée de vie
● Idée : ne pas télécharger trop souvent les
graphiques ou contenus qui ont une durée de
vie connue à l'avance
● Moyen : entête HTTP « Expires »
– Le navigateur reprend sa copie en cache
– Il ne fait aucune requête au serveur Web
● En PHP :
– header("Expires:Mon, 25 Nov 2005 12:00:00 GMT");
– Calculer la date d'expiration dynamiquement
Forum PHP 2005
PHP & performances
perrick penet , ,
Connexions persistantes
● Idée : autoriser le navigateur à faire plusieurs
requêtes avec une même connexion TCP
– Déjà fonctionnel
● Ne pas casser cette fonctionnalité existante
– Fournir l'entête HTTP Content-Length par PHP
● Limiter le temps d'attente du serveur Web
– Apache : KeepAliveTimeout 10
– Éventuellement supprimer les keepalive si on ne
sert que du PHP et qu'on le gère mal
Plan de la session
● Avant-propos
● Configuration
● Code PHP
● Protocole HTTP
● Récapitulatif
Forum PHP 2005
PHP & performances
perrick penet , ,
Récapitulatif
● Manque de réseau ?
– Compression, entêtes d'expiration, proxy
● Manque processeur ?
– caches, 304, opcode, serveur Web, extensions C
● Manque de disque ? Trop d'IO ?
– Tampons de sortie, configurations PHP et Apache
● Globalement, les réponses à tout faire :
– Une gestion correcte du protocole HTTP
ou acheter du matériel supplémentaire
PHP et performances
● Questions ?
● Expériences ?
● Partagez !
● Demandez des infos
Eric.Daspet (à) survol.net

Contenu connexe

Tendances

NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introductionToxicode
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Jean-Pierre Vincent
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPressChi Nacim
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node jsHoracio Gonzalez
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoosejeromegn
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs13p
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Memcached, une solution de cache par excellence
Memcached, une solution de cache par excellenceMemcached, une solution de cache par excellence
Memcached, une solution de cache par excellenceMehdi Mehni
 
05 2014-varnish
05 2014-varnish05 2014-varnish
05 2014-varnishthomaslc
 
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Ouadie LAHDIOUI
 
Memcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserMemcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserNimeOps
 
Amélioration des performances eCommerce - Webinaire par aYaline
Amélioration des performances eCommerce - Webinaire par aYalineAmélioration des performances eCommerce - Webinaire par aYaline
Amélioration des performances eCommerce - Webinaire par aYalineaYaline
 

Tendances (20)

NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introduction
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
Optimiser wordpress
Optimiser wordpressOptimiser wordpress
Optimiser wordpress
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPress
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node js
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoose
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 
Memcached, une solution de cache par excellence
Memcached, une solution de cache par excellenceMemcached, une solution de cache par excellence
Memcached, une solution de cache par excellence
 
05 2014-varnish
05 2014-varnish05 2014-varnish
05 2014-varnish
 
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
 
Memcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserMemcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliser
 
ToursJUG mongoDB
ToursJUG mongoDBToursJUG mongoDB
ToursJUG mongoDB
 
Amélioration des performances eCommerce - Webinaire par aYaline
Amélioration des performances eCommerce - Webinaire par aYalineAmélioration des performances eCommerce - Webinaire par aYaline
Amélioration des performances eCommerce - Webinaire par aYaline
 

En vedette

Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)
Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)
Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)Camilla Burg
 
Ordinateur Mediateur _ Roumics Novembre09
Ordinateur Mediateur _ Roumics Novembre09Ordinateur Mediateur _ Roumics Novembre09
Ordinateur Mediateur _ Roumics Novembre09Stéphanie LUCIEN-BRUN
 
La réforme des appellations d’origine et des indications géographiques en dro...
La réforme des appellations d’origine et des indications géographiques en dro...La réforme des appellations d’origine et des indications géographiques en dro...
La réforme des appellations d’origine et des indications géographiques en dro...basco
 
Beaute de l'antarctique
Beaute de l'antarctiqueBeaute de l'antarctique
Beaute de l'antarctiqueMarilena Tun
 
Arrêts de travail, les dessous de la DSN
Arrêts de travail, les dessous de la DSNArrêts de travail, les dessous de la DSN
Arrêts de travail, les dessous de la DSNLucca
 
Slide Journée 17 juin_Vs040608
Slide Journée 17 juin_Vs040608Slide Journée 17 juin_Vs040608
Slide Journée 17 juin_Vs040608Afet
 
Presentacion propuesta
Presentacion propuestaPresentacion propuesta
Presentacion propuestaCiuad de Asis
 
Les Signes de Réussite avec Agile
Les Signes de Réussite avec AgileLes Signes de Réussite avec Agile
Les Signes de Réussite avec Agileoana Juncu
 
Migration Rails 2.0 2.2
Migration Rails 2.0 2.2Migration Rails 2.0 2.2
Migration Rails 2.0 2.2Cyril Mougel
 

En vedette (20)

Senssez
SenssezSenssez
Senssez
 
Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)
Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)
Comment utiliser le reseau WiserEarth - WiserTuesdays@laRuche (21/9/10)
 
Ordinateur Mediateur _ Roumics Novembre09
Ordinateur Mediateur _ Roumics Novembre09Ordinateur Mediateur _ Roumics Novembre09
Ordinateur Mediateur _ Roumics Novembre09
 
La réforme des appellations d’origine et des indications géographiques en dro...
La réforme des appellations d’origine et des indications géographiques en dro...La réforme des appellations d’origine et des indications géographiques en dro...
La réforme des appellations d’origine et des indications géographiques en dro...
 
Beaute de l'antarctique
Beaute de l'antarctiqueBeaute de l'antarctique
Beaute de l'antarctique
 
Super Illusions
Super IllusionsSuper Illusions
Super Illusions
 
5
55
5
 
Arrêts de travail, les dessous de la DSN
Arrêts de travail, les dessous de la DSNArrêts de travail, les dessous de la DSN
Arrêts de travail, les dessous de la DSN
 
Digital Cookie 01014
Digital Cookie 01014Digital Cookie 01014
Digital Cookie 01014
 
resultados-monitoreo-acceso-info-concejos
resultados-monitoreo-acceso-info-concejosresultados-monitoreo-acceso-info-concejos
resultados-monitoreo-acceso-info-concejos
 
2011 03-09-cloud sgi
2011 03-09-cloud sgi2011 03-09-cloud sgi
2011 03-09-cloud sgi
 
nouvelle1
nouvelle1nouvelle1
nouvelle1
 
Slide Journée 17 juin_Vs040608
Slide Journée 17 juin_Vs040608Slide Journée 17 juin_Vs040608
Slide Journée 17 juin_Vs040608
 
Presentacion propuesta
Presentacion propuestaPresentacion propuesta
Presentacion propuesta
 
Les Signes de Réussite avec Agile
Les Signes de Réussite avec AgileLes Signes de Réussite avec Agile
Les Signes de Réussite avec Agile
 
Migration Rails 2.0 2.2
Migration Rails 2.0 2.2Migration Rails 2.0 2.2
Migration Rails 2.0 2.2
 
Guy Scherrer inc
Guy Scherrer incGuy Scherrer inc
Guy Scherrer inc
 
Poemes
PoemesPoemes
Poemes
 
Moneda única para latinoamérica.
Moneda única para latinoamérica.Moneda única para latinoamérica.
Moneda única para latinoamérica.
 
Angelee
AngeleeAngelee
Angelee
 

Similaire à PHP et Performances - AFUP 2005

08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMPcyruss666
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...Clément OUDOT
 
Les performances sur des développements PhP
Les performances sur des développements PhPLes performances sur des développements PhP
Les performances sur des développements PhPneuros
 
PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1fayway
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleJean-Pierre Vincent
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisChipway
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHPPierre MARTIN
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenalinf_med13
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 
Apprendre php
Apprendre phpApprendre php
Apprendre phpben zanre
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxMarc Bojoly
 
Etes vous prêts pour le succes ?
Etes vous prêts pour le succes ?Etes vous prêts pour le succes ?
Etes vous prêts pour le succes ?Steven VAN POECK
 
Nouveautés PHP 7 : Introduction et performances - MeetUP Openska
Nouveautés PHP 7 : Introduction et performances - MeetUP OpenskaNouveautés PHP 7 : Introduction et performances - MeetUP Openska
Nouveautés PHP 7 : Introduction et performances - MeetUP OpenskaOpenska
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetDevclic
 

Similaire à PHP et Performances - AFUP 2005 (20)

08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
 
Les performances sur des développements PhP
Les performances sur des développements PhPLes performances sur des développements PhP
Les performances sur des développements PhP
 
PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1
 
Accélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exempleAccélération des pages Web : les bases en exemple
Accélération des pages Web : les bases en exemple
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à Paris
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHP
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenal
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
Ocs
OcsOcs
Ocs
 
Apprendre php
Apprendre phpApprendre php
Apprendre php
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptx
 
Etes vous prêts pour le succes ?
Etes vous prêts pour le succes ?Etes vous prêts pour le succes ?
Etes vous prêts pour le succes ?
 
Nouveautés PHP 7 : Introduction et performances - MeetUP Openska
Nouveautés PHP 7 : Introduction et performances - MeetUP OpenskaNouveautés PHP 7 : Introduction et performances - MeetUP Openska
Nouveautés PHP 7 : Introduction et performances - MeetUP Openska
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internet
 

Plus de Eric D.

Bonnes pratiques API - Paris Web 2013
Bonnes pratiques API - Paris Web 2013Bonnes pratiques API - Paris Web 2013
Bonnes pratiques API - Paris Web 2013Eric D.
 
Blend Web Mix 2013 : Concevoir son API
Blend Web Mix 2013 : Concevoir son APIBlend Web Mix 2013 : Concevoir son API
Blend Web Mix 2013 : Concevoir son APIEric D.
 
Un peu de TLS ne fait pas de mal - Sudweb 2013
Un peu de TLS ne fait pas de mal - Sudweb 2013Un peu de TLS ne fait pas de mal - Sudweb 2013
Un peu de TLS ne fait pas de mal - Sudweb 2013Eric D.
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013Eric D.
 
Performance des applications web - USI Casa 2011
Performance des applications web - USI Casa 2011Performance des applications web - USI Casa 2011
Performance des applications web - USI Casa 2011Eric D.
 
Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Eric D.
 
Soirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNSoirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNEric D.
 
Yahoo! Search monkey API - CEBIT 2008
Yahoo! Search monkey API - CEBIT 2008Yahoo! Search monkey API - CEBIT 2008
Yahoo! Search monkey API - CEBIT 2008Eric D.
 
Yahoo! Fire eagle API - CEBIT 2008
Yahoo! Fire eagle API - CEBIT 2008Yahoo! Fire eagle API - CEBIT 2008
Yahoo! Fire eagle API - CEBIT 2008Eric D.
 
Migrations PHP 5 - Solutions linux 2009
Migrations PHP 5 - Solutions linux 2009Migrations PHP 5 - Solutions linux 2009
Migrations PHP 5 - Solutions linux 2009Eric D.
 
Frameworks php - Solutions Linux 2008
Frameworks php - Solutions Linux 2008Frameworks php - Solutions Linux 2008
Frameworks php - Solutions Linux 2008Eric D.
 
Un web ouvert, Paris Web 2009
Un web ouvert, Paris Web 2009Un web ouvert, Paris Web 2009
Un web ouvert, Paris Web 2009Eric D.
 
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010Eric D.
 
Introduction à la soirée webperf du 21 juillet 2010, Paris
Introduction à la soirée webperf du 21 juillet 2010, ParisIntroduction à la soirée webperf du 21 juillet 2010, Paris
Introduction à la soirée webperf du 21 juillet 2010, ParisEric D.
 
Performance des sites web - Latence - AFUP 2010
Performance des sites web - Latence - AFUP 2010Performance des sites web - Latence - AFUP 2010
Performance des sites web - Latence - AFUP 2010Eric D.
 
web, métier de valeur - Paris Web 2010
web, métier de valeur - Paris Web 2010web, métier de valeur - Paris Web 2010
web, métier de valeur - Paris Web 2010Eric D.
 
Performances Web - Afup 2008
Performances Web - Afup 2008Performances Web - Afup 2008
Performances Web - Afup 2008Eric D.
 

Plus de Eric D. (17)

Bonnes pratiques API - Paris Web 2013
Bonnes pratiques API - Paris Web 2013Bonnes pratiques API - Paris Web 2013
Bonnes pratiques API - Paris Web 2013
 
Blend Web Mix 2013 : Concevoir son API
Blend Web Mix 2013 : Concevoir son APIBlend Web Mix 2013 : Concevoir son API
Blend Web Mix 2013 : Concevoir son API
 
Un peu de TLS ne fait pas de mal - Sudweb 2013
Un peu de TLS ne fait pas de mal - Sudweb 2013Un peu de TLS ne fait pas de mal - Sudweb 2013
Un peu de TLS ne fait pas de mal - Sudweb 2013
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013
 
Performance des applications web - USI Casa 2011
Performance des applications web - USI Casa 2011Performance des applications web - USI Casa 2011
Performance des applications web - USI Casa 2011
 
Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011
 
Soirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNSoirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDN
 
Yahoo! Search monkey API - CEBIT 2008
Yahoo! Search monkey API - CEBIT 2008Yahoo! Search monkey API - CEBIT 2008
Yahoo! Search monkey API - CEBIT 2008
 
Yahoo! Fire eagle API - CEBIT 2008
Yahoo! Fire eagle API - CEBIT 2008Yahoo! Fire eagle API - CEBIT 2008
Yahoo! Fire eagle API - CEBIT 2008
 
Migrations PHP 5 - Solutions linux 2009
Migrations PHP 5 - Solutions linux 2009Migrations PHP 5 - Solutions linux 2009
Migrations PHP 5 - Solutions linux 2009
 
Frameworks php - Solutions Linux 2008
Frameworks php - Solutions Linux 2008Frameworks php - Solutions Linux 2008
Frameworks php - Solutions Linux 2008
 
Un web ouvert, Paris Web 2009
Un web ouvert, Paris Web 2009Un web ouvert, Paris Web 2009
Un web ouvert, Paris Web 2009
 
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010
Performance des sites web : qui, pourquoi, quoi, comment et où ? - USI 2010
 
Introduction à la soirée webperf du 21 juillet 2010, Paris
Introduction à la soirée webperf du 21 juillet 2010, ParisIntroduction à la soirée webperf du 21 juillet 2010, Paris
Introduction à la soirée webperf du 21 juillet 2010, Paris
 
Performance des sites web - Latence - AFUP 2010
Performance des sites web - Latence - AFUP 2010Performance des sites web - Latence - AFUP 2010
Performance des sites web - Latence - AFUP 2010
 
web, métier de valeur - Paris Web 2010
web, métier de valeur - Paris Web 2010web, métier de valeur - Paris Web 2010
web, métier de valeur - Paris Web 2010
 
Performances Web - Afup 2008
Performances Web - Afup 2008Performances Web - Afup 2008
Performances Web - Afup 2008
 

PHP et Performances - AFUP 2005

  • 1. PHP & performances Forum PHP Paris 2005 Éric Daspet
  • 2. Plan de la session ● Avant-propos ● Configuration ● Code PHP ● Protocole HTTP ● Récapitulatif
  • 3. Forum PHP 2005 PHP & performances perrick penet , , Quelle(s) performance(s) ? ● Logiciel : Serveur Web, PHP, SGBD – Nécessite souvent de l'expertise ● Matériel : processeur, mémoire, disque, réseau – Simple à ajouter ● Utilisateur : débit et réactivité – « Ressenti » difficile à mesurer
  • 4. La problématique ● Et moi ? – Quel facteur limitatif ? – Que sacrifier en retour ? – Comment y remédier ? – La performance est-elle ma priorité ?
  • 5. Il n'y aura (presque) pas de chiffres ● Peu fiables ● Dépendent : – De la configuration – De la charge système – De votre matériel – De vos besoins – De votre applicatif – etc.
  • 6. Plan de la session ● Avant-propos ● Configuration ● Code PHP ● Protocole HTTP ● Récapitulatif
  • 7. Forum PHP 2005 PHP & performances perrick penet , , Mauvaises rumeurs ● Recompiler PHP et Apache depuis les sources – Des experts l'ont déjà fait pour vous – Utile uniquement pour des besoins spécifiques – Optimisations de compilation négligeables ● Compilation statique (opposé à dynamique) – Moins souple (module non indépendants) – Aucune différence en module apache ou FastCGI
  • 8. Différents modes d'accès ● CGI : utilisé pour suexec ● Module Apache : utilisé pour les performances ● FastCGI : répond à tout ou presque, peu utilisé CGI Module Apache FastCGI Processus indépendants ? Oui Non Oui Serveurs indépendants ? Non Non Oui Configuration par application ? Non Oui Oui Performant ? Non Oui Oui Configuration / optimisation ? Non Commune Apache Oui, par appli. Utilisateurs indépendants ? Oui Non Oui
  • 9. Quel serveur Web ? ● Apache – Éprouvé – Modules nombreux ● Lighttpd – Simple – Rapide (fichiers statiques) – Peu gourmand – http://lighttpd.net/
  • 10. Forum PHP 2005 PHP & performances perrick penet , , Caches d'opcode ● Pourquoi ? – Une compilation, plusieurs exécutions – Optimisation du code ● Les noms à retenir : APC, e-accelerator, Zend ● Les résultats ? – Calcul pur : faibles ou inexistants – Applications réelles : gains importants (x2)
  • 11. Forum PHP 2005 PHP & performances perrick penet , , Quelle configuration Apache ? ● Apache – Limitez les override (.htaccess) – Limitez la profondeur des répertoires – Limitez DirectoryIndex – Pas de négociation de contenu – Pas de rewrite – Autorisez les liens symboliques – Désactivez les journaux inutiles – Désactivez la résolution DNS (n'utilisez que des IP)
  • 12. Forum PHP 2005 PHP & performances perrick penet , , Quelle configuration PHP ? ● Utiliser les limitations propres à PHP si besoin – max_input_time, max_execution_time, memory_limit ● Retirer l'inutile – register_long_arrays ($HTTP_*_VARS) – register_argc_argv – always_populate_raw_post_data – magic_quotes_* – include_path (à limiter au strict nécessaire) – open_basedir (à limiter ou retirer)
  • 13. Forum PHP 2005 PHP & performances perrick penet , , Quelle configuration PHP ? ● Les sessions – Régler la fréquence du ramasse-miette ● Trop lent = gros ralentissement peu fréquent ● Trop rapide = petit ralentissement mais très fréquent – Désactiver la réécriture d'URL (session.trans_sid) – Désactiver le démarrage automatique – Changer le système de stockage (files => mm) ● ou utiliser un système de fichier en mémoire – Profiter de session.save_path="N;/path"
  • 14. Réglage des tampons de sortie ? – Négatif ou positif, testez *votre* cas – Diminue le nombre d'I/O système ● Dans PHP : – output_buffering (valeur true ou 4096) ● Dans Apache : – SendBufferSize (valeur PageSize)
  • 15. Forum PHP 2005 PHP & performances perrick penet , , Multiplier les serveurs ● N'hésitez pas à avoir plusieurs serveurs ● Chaque requête est indépendante – Donc facilement parallélisable – Aucune configuration spécifique ● Solutions : – DNS round-robin – Répartiteur TCP/IP – Répartiteur HTTP
  • 16. Plan de la session ● Avant-propos ● Configuration ● Code PHP ● Protocole HTTP ● Récapitulatif
  • 17. Forum PHP 2005 PHP & performances perrick penet , , Utiliser les fonctions natives ● PHP est lent ... par rapport au C – Les fonctions proposées par PHP sont codées en C – PHP en a des milliers : ne réinventez pas la roue ● Exemples : – file_get_contents(), file_put_contents(), et glob() – strncmp(), http_build_query() ● PECL a ce qui n'est pas standard – Classes de gestion HTTP, systèmes de paiement, ...
  • 18. Forum PHP 2005 PHP & performances perrick penet , , Utiliser les fonctions natives ● Rien ne remplit vos besoins ? – Utilisez les bibliothèques de votre système – Créez votre extension PHP avec vos fonctions – Tout cela est très simple ● PHP sert de colle – entre le système, les données, les bibliothèques de traitement, et l'affichage – ... laissez le reste aux extensions
  • 19. Astuces de syntaxe ● Références comme des raccourcis ==> ● Limitez l'accès aux sessions ou fermez- les dès que possible ● Passez vous des regexp quand vous le pouvez ● Sinon n'utilisez pas ereg_* mais preg_* for($i=12; $i<56; $i++) { echo $tab['a']['test'][45][$i]; } ------------------------------------ $tmp =& $tab['a']['test'][45] ; for($i=12; $i<56; $i++) { echo $tmp[$i] ; }
  • 20. Forum PHP 2005 PHP & performances perrick penet , , Mauvaises idées ● Ne vous fiez pas aux rumeurs d'Internet – Gains négligeables en performances ● "toto" <-> 'toto' – Certaines croyances sont fausses ● CONSTANTE <-> $variable – Pertes importantes en lisibilité / maintenance ● if () { ... } else { ... } <-> ()?(...):(...) ● Ne vous occupez pas trop de la syntaxe – Vous avez plus à y perdre qu'à y gagner
  • 21. Accès aux données et SGBDR ● Limitez l'accès au SGBD – Les fichiers sont souvent plus pertinents ● Optimisez les accès au SGBDR – Requêtes mal codées et index manquants – Hiérarchies :
  • 22. Profilage, savoir quoi optimiser ● La grosse perte de performances n'est pas forcément là où vous croyez ● Vos armes : – Xdebug – Kcachegrind
  • 23. Forum PHP 2005 PHP & performances perrick penet , , Utilisez des caches ● Ne pas refaire un traitement plusieurs fois – Votre contenu est-il vraiment dynamique ? ● Solutions : – JPCache et Pear::Cache_Lite – Cache de requêtes Mysql 4 ● Penser à la pré-génération – Créer des fichiers statiques à la demande – Utiliser la redirection des erreurs 404 – Effacer régulièrement les vieux contenus
  • 24. Plan de la session ● Avant-propos ● Configuration ● Code PHP ● Protocole HTTP ● Récapitulatif
  • 25. Forum PHP 2005 PHP & performances perrick penet , , Utiliser les proxy ● Idée : le proxy appelle une fois la page et peut la servir à plusieurs personnes – On déclare si une page est publique ou privée ● header("Cache-Control: public, max-age=3600"); ● header("Cache-Control: no-cache, must-revalidate"); – Plusieurs clients d'une même entreprise = une seule requête ● Attention, avec les sessions PHP déclare automatiquement des pages « privées »
  • 26. Forum PHP 2005 PHP & performances perrick penet , , Cache du navigateur ● Idée : ne pas re-télécharger un contenu qui n'a pas changé depuis la dernière fois – client : « je veux le contenu s'il a été modifiée » – serveur : « il n'a pas changé, « code 304 » – client : « ok, je reprends ma copie en cache » ● Avec PHP : – $_SERVER['IF_MODIFIED_SINCE'] – $_SERVER["HTTP_IF_NONE_MATCH"]
  • 27. Cache du navigateur // on récupère et envoie la date de dernière modification $modif = gmdate('D, d M Y H:i:s', filemtime($cache_file)) ; header("Last-Modified: $modif GMT"); // on vérifie si le contenu a changé $if=substr(@$_SERVER['HTTP_IF_MODIFIED_SINCE'],0,29) ; if ($date!='' && strtotime($if)>=filemtime($cache_file)) { header('Not Modified', TRUE, 304); } // S'il a changé et si c'est nécessaire, on renvoie le contenu elseif ($_SERVER['REQUEST_METHOD'] != 'HEAD') { readfile($cache_file) ; }
  • 28. Forum PHP 2005 PHP & performances perrick penet , , Compression ● Idée : transmettre le contenu compressé (zip) – Réduction du temps d'attente du client – Gain financier important sur la bande passante – Taille divisée par 5 à 10 – On utilise 5% de proc pour diviser par 5 le réseau ● Moyen – Sous Apache : mod_gzip, mod_deflate – Sous PHP : zlib.output_compression=On
  • 29. Forum PHP 2005 PHP & performances perrick penet , , Durée de vie ● Idée : ne pas télécharger trop souvent les graphiques ou contenus qui ont une durée de vie connue à l'avance ● Moyen : entête HTTP « Expires » – Le navigateur reprend sa copie en cache – Il ne fait aucune requête au serveur Web ● En PHP : – header("Expires:Mon, 25 Nov 2005 12:00:00 GMT"); – Calculer la date d'expiration dynamiquement
  • 30. Forum PHP 2005 PHP & performances perrick penet , , Connexions persistantes ● Idée : autoriser le navigateur à faire plusieurs requêtes avec une même connexion TCP – Déjà fonctionnel ● Ne pas casser cette fonctionnalité existante – Fournir l'entête HTTP Content-Length par PHP ● Limiter le temps d'attente du serveur Web – Apache : KeepAliveTimeout 10 – Éventuellement supprimer les keepalive si on ne sert que du PHP et qu'on le gère mal
  • 31. Plan de la session ● Avant-propos ● Configuration ● Code PHP ● Protocole HTTP ● Récapitulatif
  • 32. Forum PHP 2005 PHP & performances perrick penet , , Récapitulatif ● Manque de réseau ? – Compression, entêtes d'expiration, proxy ● Manque processeur ? – caches, 304, opcode, serveur Web, extensions C ● Manque de disque ? Trop d'IO ? – Tampons de sortie, configurations PHP et Apache ● Globalement, les réponses à tout faire : – Une gestion correcte du protocole HTTP ou acheter du matériel supplémentaire
  • 33. PHP et performances ● Questions ? ● Expériences ? ● Partagez ! ● Demandez des infos Eric.Daspet (à) survol.net