<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>D-Sites &#187; performance</title>
	<atom:link href="http://www.d-sites.com/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.d-sites.com</link>
	<description>Web, PHP, Python, …</description>
	<lastBuildDate>Tue, 03 Jan 2012 08:39:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Facebook &amp; PHP II: HipHop et HPHPi</title>
		<link>http://www.d-sites.com/2010/02/02/facebook-php-ii-hiphop-et-hphpi/</link>
		<comments>http://www.d-sites.com/2010/02/02/facebook-php-ii-hiphop-et-hphpi/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 19:02:29 +0000</pubDate>
		<dc:creator>Samuel ROZE</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[Nouveautées]]></category>
		<category><![CDATA[Performances]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[hiphop]]></category>
		<category><![CDATA[hphpi]]></category>
		<category><![CDATA[Hyper-PHP]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.d-sites.com/?p=750</guid>
		<description><![CDATA[Apprenez en plus dans le nouvel article, HipHop pour PHP, qu&#8217;est-ce que c&#8217;est ? Comme prévu et annoncé dans l&#8217;article précédent &#8220;Facebook + PHP = Hyper-PHP&#8221;, l&#8217;équipe de développement de Facebook a bien annoncer son projet de faire une sorte &#8230; <a href="http://www.d-sites.com/2010/02/02/facebook-php-ii-hiphop-et-hphpi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><strong>Apprenez en plus dans le nouvel article, <a href="http://www.d-sites.com/2010/02/03/hiphop-pour-php-quest-ce-que-cest/">HipHop pour PHP, qu&#8217;est-ce que c&#8217;est ?</a></strong></p>
<p>Comme prévu et annoncé dans l&#8217;<a href="http://www.d-sites.com/2010/02/02/facebook-php-hyper-php/">article précédent &#8220;Facebook + PHP = Hyper-PHP&#8221;</a>, l&#8217;équipe de développement de Facebook a bien annoncer son projet de faire une sorte de compilateur pour PHP cet après-midi, vous pouvez la retrouver en anglais à <a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">cette adresse</a>.</p>
<p>Ce n&#8217;est en fait pas sous le nom de Hyper-PHP que les développeurs de Facebook ont décider de sortir leur moteur, mais sous le nom de <strong>HipHop</strong>, accompagné de <strong>HPHPi</strong>.</p>
<p>Facebook n&#8217;a en réalité pas tout à fait réécrit PHP depuis le début, mais a décidé de créer une extension PHP qui <strong>transforme un code PHP en un code C++</strong>, puis qui le compile. HipHop, c&#8217;est le nom du module/programme/de l&#8217;extention PHP qui va transformer votre code PHP en code C++, puis le compiler en utilisant le traditionnel g++. HPHPi, lui, permet de ne pas avoir à mettre en place un système de compilation en plus, et d&#8217;avoir simplement a <strong>utiliser PHP comme avant</strong>, mais en beaucoup plus rapide.</p>
<p>Les chiffres ont néanmoins changer car on ne parle ici que d&#8217;une <strong>diminution de 50%</strong> &#8211; <em>contre 80% d&#8217;après les rumeurs précédentes</em> &#8211; <strong>de la consommation du CPU</strong>, sans même avancer de chiffres d&#8217;augmentation de performances, même si il est tout de même le sujet de tout l&#8217;article de Facebook, c&#8217;est donc sans douter que ça a très certainement un gros bénéfice, puisque <strong>Facebook.com l&#8217;utilise déjà sur près de 90% de ses serveurs</strong>!</p>
<p>À noter tout de même que dans l&#8217;article, il est précisé que des fonctions sont perdues, comme la fonction <code>eval</code> par exemple <em>(ce n&#8217;est pas plus mal pour celle-ci)</em> et que l&#8217;équipe de développement a réécrit de nombreuses extensions pour les adapter à leur HipHop PHP, ce qui fera sans aucun doute que cette innovation pour PHP ne sera pas ajoutée à PHP, contrairement aux caches OPCodes qui le seront pour PHP 6, et restera un projet distant externe à PHP pour un petit moment.</p>
<p>C&#8217;est donc à tester sans attendre, lorsque que les sources seront disponibles dans la nuit (fin d&#8217;après-midi chez nos amis américains) à cette adresse, qui ne marchera que lorsque les sources seront disponibles:</p>
<ul>
<li><a href="http://github.com/facebook/hiphop-php/">http://github.com/facebook/hiphop-php/</a></li>
</ul>
<p>Dès possible je ferais des tests et des benchmarks, que je ne manquerait pas de diffuser ici.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.d-sites.com/2010/02/02/facebook-php-ii-hiphop-et-hphpi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Performances de votre site, au delà du code PHP</title>
		<link>http://www.d-sites.com/2008/12/09/performances-de-votre-site-au-dela-du-code-php/</link>
		<comments>http://www.d-sites.com/2008/12/09/performances-de-votre-site-au-dela-du-code-php/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 19:16:03 +0000</pubDate>
		<dc:creator>Samuel ROZE</dc:creator>
				<category><![CDATA[Adm. Système]]></category>
		<category><![CDATA[Affichage]]></category>
		<category><![CDATA[Forum PHP 2008]]></category>
		<category><![CDATA[Performances]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[concaténation]]></category>
		<category><![CDATA[navigateur]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.mes-stats.fr/?p=60</guid>
		<description><![CDATA[Cet article s&#8217;agit d&#8217;une retranscription de la conférence de Eric Daspet au Forum PHP 2008. Quelques chiffres En 2003, les pages HTML faisait en moyenne 100Ko (images comprises) et impliquaient une centaine de composants. Aujourd&#8217;hui, fin 2008, les pages font &#8230; <a href="http://www.d-sites.com/2008/12/09/performances-de-votre-site-au-dela-du-code-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Cet article s&#8217;agit d&#8217;une retranscription de la conférence de <a href="http://performance.survol.fr/2008/12/performances-web-a-lafup/">Eric Daspet</a> au Forum PHP 2008.</em></p>
<h2 class="western">Quelques chiffres</h2>
<p style="margin-bottom: 0cm;">En 2003, les pages HTML faisait en moyenne 100Ko (images comprises) et impliquaient une centaine de composants.</p>
<p style="margin-bottom: 0cm;">Aujourd&#8217;hui, fin 2008, les pages font en moyenne 300 Ko pour 300 composants, soit une augmentation assez conséquente.</p>
<p style="margin-bottom: 0cm;">D&#8217;après les calculs Google, un diminution de 30% du poids de la page (entrainant bien évidement une baisse conséquente de trafic et de temps de chargement) produit chez eux une augmentation de du trafic de 30%, ce qui montre l&#8217;importance du temps de chargement de la page pour les utilisateurs. En effet, même inconsciemment, tous les utilisateurs de site web choisissent et préfèrent un site web rapide à charger qu&#8217;une bibliothèque d&#8217;images&#8230;<span id="more-60"></span></p>
<h2 class="western">Où agir ?</h2>
<p style="margin-bottom: 0cm;">Optimiser PHP (en général, vos scripts serveurs) c&#8217;est bien, c&#8217;est utile. Cependant, il faut se rendre compte que le temps d&#8217;exécution de votre script coté serveur influe (en moyenne) de seulement 5% sur le temps de chargement de votre page web ! 95% du temps de chargement est du à de nombreuses requêtes HTTP avec un temps de latence important et pour un peu une parallélisation nulle ou de peu d&#8217;éléments.</p>
<p style="margin-bottom: 0cm;">Le back-end est un système important mais l&#8217;optimisation du front-end offre un bien meilleur ROI (Return Of Investissement, Retour sur investissement en français) qu&#8217;une revue sur back-end.</p>
<h2 class="western">Quels objectifs ?</h2>
<p style="margin-bottom: 0cm;">De nombreuses requêtes HTTP est la principale cause de ralentissement de la page. En effet, que peu d&#8217;éléments sont télécharger en parallèle (on appelle ça la parallélisation) et chaque requête envoyée au serveur attend, bien évidement, la réponse&#8230; Cette réponse peut mettre plusieurs dizaines (voire centaines sur les serveurs ne se trouvent pas sur le même continent par exemple, ou que le trafic est très engorgé) de milisecondes de latence. Le démarrage d&#8217;une requête devant attendre la fin de la précédente, le chargement de la page est considérablement ralenti.</p>
<p style="margin-bottom: 0cm;">De plus, après avoir réduit le nombre de requêtes HTTP, on va essayer de réduire la taille de toutes les données envoyées par le serveur et reçues par le navigateur du client.</p>
<p style="margin-bottom: 0cm;">
<h2 class="western">Le cache HTTP</h2>
<p style="margin-bottom: 0cm;">Le navigateur utilise un outil fameux, qu&#8217;est le cache. En plus des différents cache de votre application, au niveau de client, le navigateur essaye de charger le moins de contenu statique et de les stocker en local pour une utilisation ultérieure.</p>
<p style="margin-bottom: 0cm;">Pour dire au navigateur qu&#8217;il faut qu&#8217;il garde le fichier (que ce soit une image, un fichier PHP, un CSS, du JS, etc&#8230;) en cache, nous allons utiliser seulement deux entêtes HTTP :</p>
<blockquote>
<p style="margin-bottom: 0cm;">Expires: Wed, 24 Oct 2018 21:32:33 GMT</p>
</blockquote>
<p style="margin-bottom: 0cm;">Qui met en cache le fichier jusqu&#8217;en 2018, ou&#8230;</p>
<blockquote>
<p style="margin-bottom: 0cm;">Cache-Control: public, max-age: 3600</p>
</blockquote>
<p style="margin-bottom: 0cm;">&#8230;qui met le fichier en cache pendant une heure.</p>
<p style="margin-bottom: 0cm;">Ces entêtes, vous pouvez les définir via la fonction « header » de PHP ou simplement grace à un fichier HTACCESS placé dans un répertoire parent du fichier concerné.</p>
<p style="margin-bottom: 0cm;"><strong>Note:</strong> Vous pouvez définir uniquement Cache-control, seulement, le navigateur va quand même interroger le serveur HTTP pour connaître la date de modification et définir si, oui ou non, le fichier a été modifié. S&#8217;il l&#8217;a été, le navigateur récupère le nouveau fichier, sinon, il le prend en cache. Cette méthode permet d&#8217;économiser de la bande passante et accélère un peu l&#8217;acquisition du fichier par le client mais le temps de latence entre le client et le serveur est toujours là.<br />
L&#8217;utilisation de l&#8217;en-tête Expires permet tout simplement de dire au navigateur de prendre directement le fichier dans son cache, et de ne pas demander quoi que se soit au serveur à propos de ce fichier.</p>
<p style="margin-bottom: 0cm;">Le problème, c&#8217;est que par exemple, vous avez un fichier Image « header.png » qui est l&#8217;image affichée à l&#8217;entête de votre site. Nous sommes en période de fête donc vous souhaitez afficher une image simpatique avec de la neige. Vous avez précédemment demander aux navigateurs de mettre en cache l&#8217;image jusqu&#8217;en 2018 (exemple précédent) : les visiteurs n&#8217;auront la nouvelle image que si vous changez de nom. Ce problème ce pose en fait surtout pour le Javascript qui est amené à changer un peu plus que les images.</p>
<p style="margin-bottom: 0cm;">Pour contrer ce (petit) problème, ajoutez un argument URL à l&#8217;adresse de l&#8217;image. Pour le navigateur, le fichier ne sera pas le même, pour Apache (ou une autre application), c&#8217;est toujours le fichier « header.png ». Par exemple :</p>
<blockquote>
<p style="margin-bottom: 0cm;">&lt;script type=&#8217;text/javascript&#8217; src=&#8217;monjs.js?&lt;?php echo filemtime(&#8216;./monjs.js&#8217;); ?&gt;&#8217;&gt;&lt;/script&gt;</p>
</blockquote>
<p style="margin-bottom: 0cm;">La date de modification sera ajoutée automatiquement à chaque chargement de page. Un cache sur le résultat de cette fonction est automatiquement mis dans PHP mais il ne reste pas très longtemps.</p>
<h2 class="western">Pré-charger des images ?</h2>
<p>Utilisé par Google, le principe est simple : sur votre page d&#8217;accueil, vous chargez des images qui ne vont pas vous servir pour cette page mais, plus tard. Tout en bas de la page (important car comme ça, les utilisateurs croient que la page est complètement chargée alors qu&#8217;il y a toujours des téléchargements), utilisez du Javascript pour faire charger l&#8217;image par le navigateur et qu&#8217;elle soit mise en cache:</p>
<blockquote><p>var myImage = new Image();<br />
myImage.src = &#8216;http://adresse/de/l/image.ext&#8217;;</p></blockquote>
<p>Et l&#8217;image est chargée..</p>
<h2 class="western">Concaténation et compression</h2>
<p>Pour accélérer encore une fois le temps de chargement, nous allons maintenant travailler sur la taille du fichier. Supprimer de nombreux espaces dans les fichiers JS, CSS et HTML peut faire gagner près de 30% de taille de fichier ! Pour les fichiers javascript, l&#8217;utilisation de Compressor Rater ou YUICompressor permet d&#8217;économiser parfois jusqu&#8217;à 70% de la taille ! Un fichier de 10Ko passe alors à 3 Ko. <em>D&#8217;après une réctification d&#8217;Eric Daspet, &#8220;c&#8217;est encore mieux que ça, un fichier de 100k peut facilement passer en dessous de 10ko voire 7ko.&#8221;</em></p>
<p>En général, sur de nombreux sites, les fichiers Javascript sont séparés en plusieurs et de même pour les fichiers CSS. Cette pratique est un gain important de lisibilité mais qui ralenti considérablement le temps de chargement du site. En effet, admettons que pour un site quelconque, on ai 5 fichiers de 20 Ko de code (concatené) et que entre le client et le serveur, il y ai une latence de 100ms et un transfert de 100Ko/s (&lt;=&gt; 0.1 Ko/ms )<br />
Avec les 5 fichiers distincts, on obtient: 5*100 + 20*5*0.1 ms. Soit 510ms uniquement pour les scripts Javascript !<br />
Si les fichiers étaient tous en un, on obtient un fichier de 100Ko. On a donc: 100 + 100*0.1. Soit 110ms. Une division de près de 5 pour les mêmes données !</p>
<p>Le même principe est tout à fait utilisable sur les images. Si vous utilisez des petites icônes, regroupez-les dans une seule image et utilisez la propriété CSS background-postition pour choisir quelle partie de cette grande image (appelée sprites) afficher.</p>
<p style="text-decoration: none;">Une fois ces réductions effectuées, on peut maintenant essayer de diminuer encore plus le poids des données échangées entre le navigateur et le serveur. Pour cela, pour allons compresser les données sortantes du serveur directement avec un module Apache: mod_deflate (Apache 2) ou mod_gzip (Apache 1).</p>
<p style="text-decoration: none;">En ce qui concerne les images, voici quelques conseils:</p>
<ul>
<li>
<p style="text-decoration: none;">Malgré des croyances bizarres, 	les images PNG sont souvent moins lourdes pour la même qualité. 	N&#8217;utilisez pas GIF si PNG est mieux.</p>
</li>
<li>
<p style="text-decoration: none;">Passez toutes les images par 	PNGCrush avant de mettre en ligne : Photoshop fait un travail assez 	(voire très) bâclé là-dessous. PNGCrush essaye un grand nombre 	de compressions pour trouver la meilleure, sans pertes d&#8217;erreurs 	bien évidement. Un autre outils sur web existe aussi, c&#8217;est 	www.Smushit.com.</p>
</li>
<li>
<p style="text-decoration: none;">Retirez les méta-données des 	images.</p>
</li>
<li>
<p style="text-decoration: none;">Utilisez PNG8 (256 couleurs) à 	la place de PNG24 car très souvent, on ne voit pas la 	différence mais la taille est inférieur en PNG8.</p>
</li>
<li>
<p style="text-decoration: none;">Ne pas utiliser Alpha Image 	Loader. Cette fonctionnalité fait perdre en moyenne 100ms (!!) de 	traitement par image sur le navigateur.</p>
</li>
</ul>
<h2 class="western" style="text-decoration: none;">Parallélisation</h2>
<p style="text-decoration: none;">Maintenant, beaucoup de navigateurs supportent les téléchargements en parallèle. Cette méthode permet de ne pas trop être atteint par les latences lors du chargement d&#8217;un fichier. Les navigateurs téléchargent entre 2 et 8 fichiers simultanés (IE6 peut faire 2 téléchargements simultanés maximum).</p>
<p style="text-decoration: none;">Une balise Javascript bloque toute autre opération. A partir du moment où le moteur de rendu est arrivé sur une balise Javascript qui nécessite un téléchargement du fichier depuis le serveur, toutes les autres opérations sont arrêtées: la lecture du code est finie. Ce phénomène est embêtant mais logique. En effet, le fichier JS peut modifier toute la structure du HTML et par conséquent modifier la liste des fichiers à télécharger.</p>
<p style="text-decoration: none;">Pour contrer ce problème, chargez-les dynamiquement :</p>
<blockquote>
<p style="text-decoration: none;">var js = doucment.createElement(&#8216;script&#8217;);<br />
js.src = &#8216;myscript.js&#8217;;</p>
</blockquote>
<h2 class="western" style="text-decoration: none;">Javascript</h2>
<p style="text-decoration: none;">Une modification de la taille, de la couleur ou quelque autre paramètre graphique d&#8217;un élément HTML affiché sur la page web implique une nouvelle exécution du moteur de rendu.</p>
<p style="text-decoration: none;">Prenons un exemple pour expliquer ce problème: Au clic sur un bouton, vous voulez modifier la couleur de tous les liens (les mettre en vert). Vous allez faire une boucle sur tous les objets a et vous allez faire un obj.style.color = &#8216;#00FF00&#8242;;<br />
C&#8217;est très mauvais au niveau de la performance pour le navigateur. En effet, si vous avez 50 liens (ce qui n&#8217;est pas excessif) vous allez impliquer 50 nouveaux rendus et 50 lectures.</p>
<p style="text-decoration: none;"><strong>Note:</strong> Une lecture implique un rendu avant elle. C&#8217;est-à-dire qu&#8217;avant une lecture, après une écriture (mise à jour d&#8217;un élément par exemple), il y a un rendu.</p>
<p style="text-decoration: none;">Pour ne pas faire de rendu à chaque fois, mettez les éléments à mettre à jour dans un liste. Une fois la liste composée, parcourez cette nouvelle liste et mettez à jour les éléments. Le navigateur va détecter qu&#8217;ils n&#8217;y a que des écritures et va lancer un rendu uniquement à la fin de toutes les modifications.</p>
<h2 class="western" style="text-decoration: none;">Quelques liens</h2>
<ul>
<li><span style="color: #888888;"><strong>[fr]</strong></span> <a href="https://addons.mozilla.org/fr/firefox/addon/1843">Firebug</a></li>
<li><strong><span style="color: #888888;">[en]</span></strong> <a href="http://developer.yahoo.com/yslow/">YSlow (extension à 	Firebug)</a> : Donne une note au site et dit ce qui ne va pas. Note de A 	à F. Le but est d&#8217;avoir A.</li>
<li><strong><span style="color: #888888;">[en]</span></strong> <a href="http://performance.webpagetest.org:8080/">AOL Page Test</a> : Graphiques en cascade</li>
<li><span style="text-decoration: none;"><strong><span style="color: #888888;">[en]</span></strong> <a href="http://developer.yahoo.com/performance">Document de Yahoo 	sur les performances</a></span></li>
<li><span style="text-decoration: none;"><strong><span style="color: #888888;">[en]</span></strong> <a href="http://www.amazon.com/dp/0596529309">Livre « High 	Performance Web Sites: Essential Knowledge for Front-End Engineers » </a></span></li>
<li><strong><span style="color: #888888;">[fr]</span></strong> <a href="http://www.eyrolles.com/Informatique/Livre/php-5-avance-9782212113235">Livre « PHP 5 	Avancé »</a></li>
<li><span style="text-decoration: none;"><strong><span style="color: #888888;">[fr]</span></strong> <a href="http://performance.survol.fr/">Blog d&#8217;Éric Daspet</a></span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.d-sites.com/2008/12/09/performances-de-votre-site-au-dela-du-code-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performances PHP: Arguments IF</title>
		<link>http://www.d-sites.com/2008/10/12/performances-php-arguments-if/</link>
		<comments>http://www.d-sites.com/2008/10/12/performances-php-arguments-if/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 06:00:13 +0000</pubDate>
		<dc:creator>Samuel ROZE</dc:creator>
				<category><![CDATA[Performances]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[arguments]]></category>
		<category><![CDATA[condition]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[ordre]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.mes-stats.fr/?p=51</guid>
		<description><![CDATA[Je fait ce petit article très court pour vous aider à optimiser (légerement peut-être mais bon&#8230;) vos arguments de conditions. Je vais parler ici du cas d&#8217;un IF valable si un ou plusieurs arguments parmis tous sont à &#8220;true&#8221; : &#8230; <a href="http://www.d-sites.com/2008/10/12/performances-php-arguments-if/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je fait ce petit article très court pour vous aider à optimiser (légerement peut-être mais bon&#8230;) vos arguments de conditions. Je vais parler ici du cas d&#8217;un IF valable si un ou plusieurs arguments parmis tous sont à &#8220;true&#8221; :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$arg1</span> <span style="color: #339933;">||</span> arg2 <span style="color: #339933;">||</span> arg3<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'OK'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Ce script va donc afficher &#8220;OK&#8221; si la variables $arg1 == true OU si la constante arg2 == true OU si la fonction arg3 renvoi &#8220;true&#8221;.<br />
Si $arg1 == true, PHP va directement s&#8217;arrêter de vérifier les conditions et va exécuter ce qu&#8217;il y a dans le IF.<br />
Sinon, si arg2 == true, PHP va directement s&#8217;arrêter de vérifier les conditions et va exécuter ce qu&#8217;il y a dans le IF.<br />
Sinon, si arg3() == true, PHP va directement s&#8217;arrêter de vérifier les conditions et va exécuter ce qu&#8217;il y a dans le IF.<br />
etc&#8230;<span id="more-51"></span></p>
<p>En effet, il faut donc :</p>
<ul>
<li>Mettre en priorité les fonctions rapides</li>
<li>Mettre en priorité les fonctions les plus appelées  dans le cas d&#8217;une REGEX par exemple</li>
</ul>
<p>Prenons le cas d&#8217;une suite de REGEX. Si $var est à 70% égale à &#8216;monblabla&#8217;, à 20% égale à &#8216;la vie est belle&#8217; et à 10% égale à &#8216;une autre phrase&#8217;, cet IF est optimisé (l&#8217;ordre des arguments) :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#bla#'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span>
    <span style="color: #339933;">||</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#belle#'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span>
    <span style="color: #339933;">||</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#autre#'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'OK'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Peut-être cela répondra à des questions de certains.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.d-sites.com/2008/10/12/performances-php-arguments-if/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching 1/19 queries in 0.036 seconds using apc
Object Caching 381/425 objects using apc

Served from: d-sites.com @ 2012-02-04 19:58:37 -->
