<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Commentaires sur : Javascript &amp; PHP, deux goulots d&#8217;étranglement du Web ?</title>
	<atom:link href="http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/</link>
	<description>Optimisation de sites E-commerce</description>
	<lastBuildDate>Mon, 06 Sep 2010 14:57:56 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : Philippe Humeau</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1062</link>
		<dc:creator>Philippe Humeau</dc:creator>
		<pubDate>Tue, 09 Mar 2010 15:02:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1062</guid>
		<description>Evidemment le programme ne tiens pas dans le cache processeur, ni L1, ni L2. Je parle du cache Opcode d&#039;APC ou Zend server.

Ne m&#039;en parle pas. Notre cellule sécurité tombe tous les jours sur des XSS et des SQL injections triviales. C&#039;est dramatique, on en a aussi dans Magento que nous n&#039;avons pas releasé car elles sont en correction chez Varien...</description>
		<content:encoded><![CDATA[<p>Evidemment le programme ne tiens pas dans le cache processeur, ni L1, ni L2. Je parle du cache Opcode d&#8217;APC ou Zend server.</p>
<p>Ne m&#8217;en parle pas. Notre cellule sécurité tombe tous les jours sur des XSS et des SQL injections triviales. C&#8217;est dramatique, on en a aussi dans Magento que nous n&#8217;avons pas releasé car elles sont en correction chez Varien&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Eric</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1061</link>
		<dc:creator>Eric</dc:creator>
		<pubDate>Tue, 09 Mar 2010 14:58:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1061</guid>
		<description>Si tu parles tu cache processeur, non, ça ne tiendra pas. Rien que PHP lui même (le moteur) n&#039;y tiendra pas. Je parle bien d&#039;accès RAM aux opcode plutot qu&#039;aux PHP eux même.

Certes le C n&#039;est pas en disparition lui même, mais côté appli web, on en voit de moins en moins. Ca se limite aux modules/bibliothèques et rarement à l&#039;applicatif.

Après sur les XSS, je désespère à chaque fois que je lis le code de tiers, mais cela tient plus à une culture qu&#039;au langage. Des mauvais développeurs C il y en a aussi et les résultats peuvent être bien plus dramatiques.

&quot;&quot;&quot;Sans parler de jeter PHP, visiblement sans trop modifier le langage, on peut arriver à le rendre “compilable”, ce qui déjà est un gain. On va tester mais je pense que ca ira bien au delà des 5% que tu annonce et d’un grand facteur. &quot;&quot;&quot;

Attention, je ne parle pas de 5% du CPU mais 5% du temps de chargement de la page (images, javascript, html, réseau, tout compris)</description>
		<content:encoded><![CDATA[<p>Si tu parles tu cache processeur, non, ça ne tiendra pas. Rien que PHP lui même (le moteur) n&#8217;y tiendra pas. Je parle bien d&#8217;accès RAM aux opcode plutot qu&#8217;aux PHP eux même.</p>
<p>Certes le C n&#8217;est pas en disparition lui même, mais côté appli web, on en voit de moins en moins. Ca se limite aux modules/bibliothèques et rarement à l&#8217;applicatif.</p>
<p>Après sur les XSS, je désespère à chaque fois que je lis le code de tiers, mais cela tient plus à une culture qu&#8217;au langage. Des mauvais développeurs C il y en a aussi et les résultats peuvent être bien plus dramatiques.</p>
<p>&#8220;&#8221;"Sans parler de jeter PHP, visiblement sans trop modifier le langage, on peut arriver à le rendre “compilable”, ce qui déjà est un gain. On va tester mais je pense que ca ira bien au delà des 5% que tu annonce et d’un grand facteur. &#8220;&#8221;"</p>
<p>Attention, je ne parle pas de 5% du CPU mais 5% du temps de chargement de la page (images, javascript, html, réseau, tout compris)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Philippe Humeau</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1060</link>
		<dc:creator>Philippe Humeau</dc:creator>
		<pubDate>Tue, 09 Mar 2010 13:43:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1060</guid>
		<description>Je ne suis pas sur que tout le code PHP d&#039;un site tournant sous Magento tienne en cache d&#039;opcode dans l&#039;espace RAM réservé pour APC ou autre opcode compiler. Pour rester efficient un cache doit être d&#039;une taille limitée et plus rapide qu&#039;un accès en RAM &quot;classique&quot; aux fichiers PHP eux mêmes.

Ceci dit, 50% ca reste un gain très alléchant. J&#039;espère qu&#039;on pourra faire un solide benchmark prochainement de ces questions.

On a des stats assez différentes visiblement sur ce qui charge les machines. Les I/O disk sont négligeables (all to ram) pour nous, les I/O réseau également, l&#039;OS tiens dans très peu de CPU, nos frontaux sont donc des machines à loop sur de l&#039;apache / mod_php et des opcode optimizers. 90% + du temps CPU en fait.

Sans parler de jeter PHP, visiblement sans trop modifier le langage, on peut arriver à le rendre &quot;compilable&quot;, ce qui déjà est un gain. On va tester mais je pense que ca ira bien au delà des 5% que tu annonce et d&#039;un grand facteur. 

Quand au C, il n&#039;est pas en voie d&#039;abandon à mon sens. Avec ses moutures, C++, C#, il reste la composante principale de tous les OS et d&#039;une grande part de l&#039;opensource (qui ne se réduit pas au paradigme LAMP). Ruby, Python et Java ont pu voir le jour car les ressources augmentait et effectivement le ratio temps de dev / vitesse d&#039;execution dont tu parlais a fait basculer vers le développement plus facile. Il y a moyen de ne pas régresser sur les deux plans. Hip hop va dans ce sens. Peut être aurons nous d&#039;ailleurs de nouveaux langages dans quelques années. 

Quand au temps passé sur des algos d&#039;optimisation apprenait au moins quelques bases dont tout le monde se fout maintenant. Le C m&#039;a appris à penser à mon code avant de le jeter dans un fichier. Les XSS à profusions que l&#039;on voit, c&#039;était du non controle des entrées dont on se préoccupais bien plus il y a 10 ans pour éviter des buffers overflows. Quand au C++/C#, il reste bien loin du processeur dans sa syntaxe et très proche une fois compilé, mais effectivement, il est fortement typé et il faut gérer ses allocations de RAM, en fait savoir ce que l&#039;on manipule.

Ceci étant, merci de ta participation, c&#039;est un débat et visiblement on est maintenant plus sur des opinions que sur des faits tangibles. 

Je t&#039;invite à participer avec nous à un benchmark de tout cela, avec hardware, soft, ingénieurs et tout ce qu&#039;on a en expérience des deux cotés pour fournir des réponses factuelles, scientifiques et statistiques à nos questions sur le domaine et surtout à la communauté.</description>
		<content:encoded><![CDATA[<p>Je ne suis pas sur que tout le code PHP d&#8217;un site tournant sous Magento tienne en cache d&#8217;opcode dans l&#8217;espace RAM réservé pour APC ou autre opcode compiler. Pour rester efficient un cache doit être d&#8217;une taille limitée et plus rapide qu&#8217;un accès en RAM &#8220;classique&#8221; aux fichiers PHP eux mêmes.</p>
<p>Ceci dit, 50% ca reste un gain très alléchant. J&#8217;espère qu&#8217;on pourra faire un solide benchmark prochainement de ces questions.</p>
<p>On a des stats assez différentes visiblement sur ce qui charge les machines. Les I/O disk sont négligeables (all to ram) pour nous, les I/O réseau également, l&#8217;OS tiens dans très peu de CPU, nos frontaux sont donc des machines à loop sur de l&#8217;apache / mod_php et des opcode optimizers. 90% + du temps CPU en fait.</p>
<p>Sans parler de jeter PHP, visiblement sans trop modifier le langage, on peut arriver à le rendre &#8220;compilable&#8221;, ce qui déjà est un gain. On va tester mais je pense que ca ira bien au delà des 5% que tu annonce et d&#8217;un grand facteur. </p>
<p>Quand au C, il n&#8217;est pas en voie d&#8217;abandon à mon sens. Avec ses moutures, C++, C#, il reste la composante principale de tous les OS et d&#8217;une grande part de l&#8217;opensource (qui ne se réduit pas au paradigme LAMP). Ruby, Python et Java ont pu voir le jour car les ressources augmentait et effectivement le ratio temps de dev / vitesse d&#8217;execution dont tu parlais a fait basculer vers le développement plus facile. Il y a moyen de ne pas régresser sur les deux plans. Hip hop va dans ce sens. Peut être aurons nous d&#8217;ailleurs de nouveaux langages dans quelques années. </p>
<p>Quand au temps passé sur des algos d&#8217;optimisation apprenait au moins quelques bases dont tout le monde se fout maintenant. Le C m&#8217;a appris à penser à mon code avant de le jeter dans un fichier. Les XSS à profusions que l&#8217;on voit, c&#8217;était du non controle des entrées dont on se préoccupais bien plus il y a 10 ans pour éviter des buffers overflows. Quand au C++/C#, il reste bien loin du processeur dans sa syntaxe et très proche une fois compilé, mais effectivement, il est fortement typé et il faut gérer ses allocations de RAM, en fait savoir ce que l&#8217;on manipule.</p>
<p>Ceci étant, merci de ta participation, c&#8217;est un débat et visiblement on est maintenant plus sur des opinions que sur des faits tangibles. </p>
<p>Je t&#8217;invite à participer avec nous à un benchmark de tout cela, avec hardware, soft, ingénieurs et tout ce qu&#8217;on a en expérience des deux cotés pour fournir des réponses factuelles, scientifiques et statistiques à nos questions sur le domaine et surtout à la communauté.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Eric D.</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1059</link>
		<dc:creator>Eric D.</dc:creator>
		<pubDate>Mon, 08 Mar 2010 19:14:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1059</guid>
		<description>Le terme de compilé est peut être maladroit, il est à défaut de mieux, mais il est presque meilleur que &quot;interprété&quot;. Nous ne sommes plus en interprété dans PHP, pas beaucoup plus qu&#039;en Java en tout cas. 
Au final ça fait quand même une sacré différence, surtout si la création de l&#039;opcode n&#039;est faite qu&#039;une seule fois.


Mais surtout je m&#039;adresse à ton affirmation sur le fait que les fichiers sont relus et réintéerprétés à chaque exécution. Sauf à se passer de APC, e-accelerator et autres équivalents, ce n&#039;est plus le cas. Et parler performance sans même installer ça serait vraiment étrange.
L&#039;opcode est en mémoire, PHP aussi, les seules &quot;relectures&quot; qui restent ce sont les check de date de fichier au cas où ils ont changé (et même ça c&#039;est désactivable).

Bref, l&#039;état de l&#039;art est bien moins désastreux que ce que ton billet sous-entend.


Après je crains que tu ne surestimes beaucoup l&#039;effet de la compilation. Hip Hop, en réécrivant les interfaces des modules, en transposant en C++ qui compile, ne gagne que 50%. On est loin du rapport 1 à 10 que tu imagines. C&#039;est pour ça que je te parlais de dynamique faiblement typé. Le principe même est complexe, qu&#039;on soit en compilé ou pas.

Après les 50% de Facebook c&#039;est avec des bons développeurs, des systèmes de données dédiés, etc. Pour un site sérieux avec des développeurs pas mauvais le temps pris par les exécutions c&#039;est de l&#039;I/O disque, du SGBDR, des variables d&#039;environnement, des modules tiers bof-bof, etc. Je m&#039;attends à avoir des statistiques bien moins glorieuses sur la plupart des configurations (même pour des développeurs qui se jugent &quot;bons&quot;).

Alors certes on peut retirer le typage faible, trouver un moyen de passer par un compulateur, corriger la liaison entre le serveur web et PHP pour se passer du FastCGI, mais au final on va retrouver les segfault, un confort bien moins grand ... quel intérêt de rester avec PHP alors ?

Vu que la force de PHP ce n&#039;est certainement pas sa syntaxe (beurk), ou la cohérence de sa lib standard (beurk x2), autant aller directement sur du C++ ou au moins sur du Java ou du .Net qui ont des VMs qui tournent bien mieux que PHP. Ca fonctionne déjà ;)

Reste après que malheureusement le goulot d&#039;étranglement sur le web ce n&#039;est pas PHP, loin de là. Sur un site classique la page PHP représente moins de 10% du temps de chargement. Optimiser 50% de 10% (donc 5% au final) en tuant tout le confort qui est justement l&#039;avantage de PHP, je ne suis pas convaincu. Ca peut être valable pour certains cas de Facebook mais sinon ...

Pour moi ce serait faire l&#039;évolution inverse de toute l&#039;informatique qui a abandonné l&#039;assembleur pour du C, puis abandonné le C pour les langages sur la JVM ou la CLR, et maintenant se penche encore plus sur les langages de scripts comme PHP ruby ou python. Ce n&#039;est pas pour rien, c&#039;est que sauf cas exceptionnels le temps perdu en allant plus près du processeur c&#039;est du temps sur lequel on ne travaille pas l&#039;archi, le réseau, les algos ... et qu&#039;au final on ne s&#039;y retrouve pas vraiment.</description>
		<content:encoded><![CDATA[<p>Le terme de compilé est peut être maladroit, il est à défaut de mieux, mais il est presque meilleur que &#8220;interprété&#8221;. Nous ne sommes plus en interprété dans PHP, pas beaucoup plus qu&#8217;en Java en tout cas.<br />
Au final ça fait quand même une sacré différence, surtout si la création de l&#8217;opcode n&#8217;est faite qu&#8217;une seule fois.</p>
<p>Mais surtout je m&#8217;adresse à ton affirmation sur le fait que les fichiers sont relus et réintéerprétés à chaque exécution. Sauf à se passer de APC, e-accelerator et autres équivalents, ce n&#8217;est plus le cas. Et parler performance sans même installer ça serait vraiment étrange.<br />
L&#8217;opcode est en mémoire, PHP aussi, les seules &#8220;relectures&#8221; qui restent ce sont les check de date de fichier au cas où ils ont changé (et même ça c&#8217;est désactivable).</p>
<p>Bref, l&#8217;état de l&#8217;art est bien moins désastreux que ce que ton billet sous-entend.</p>
<p>Après je crains que tu ne surestimes beaucoup l&#8217;effet de la compilation. Hip Hop, en réécrivant les interfaces des modules, en transposant en C++ qui compile, ne gagne que 50%. On est loin du rapport 1 à 10 que tu imagines. C&#8217;est pour ça que je te parlais de dynamique faiblement typé. Le principe même est complexe, qu&#8217;on soit en compilé ou pas.</p>
<p>Après les 50% de Facebook c&#8217;est avec des bons développeurs, des systèmes de données dédiés, etc. Pour un site sérieux avec des développeurs pas mauvais le temps pris par les exécutions c&#8217;est de l&#8217;I/O disque, du SGBDR, des variables d&#8217;environnement, des modules tiers bof-bof, etc. Je m&#8217;attends à avoir des statistiques bien moins glorieuses sur la plupart des configurations (même pour des développeurs qui se jugent &#8220;bons&#8221;).</p>
<p>Alors certes on peut retirer le typage faible, trouver un moyen de passer par un compulateur, corriger la liaison entre le serveur web et PHP pour se passer du FastCGI, mais au final on va retrouver les segfault, un confort bien moins grand &#8230; quel intérêt de rester avec PHP alors ?</p>
<p>Vu que la force de PHP ce n&#8217;est certainement pas sa syntaxe (beurk), ou la cohérence de sa lib standard (beurk x2), autant aller directement sur du C++ ou au moins sur du Java ou du .Net qui ont des VMs qui tournent bien mieux que PHP. Ca fonctionne déjà <img src='http://www.wikigento.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Reste après que malheureusement le goulot d&#8217;étranglement sur le web ce n&#8217;est pas PHP, loin de là. Sur un site classique la page PHP représente moins de 10% du temps de chargement. Optimiser 50% de 10% (donc 5% au final) en tuant tout le confort qui est justement l&#8217;avantage de PHP, je ne suis pas convaincu. Ca peut être valable pour certains cas de Facebook mais sinon &#8230;</p>
<p>Pour moi ce serait faire l&#8217;évolution inverse de toute l&#8217;informatique qui a abandonné l&#8217;assembleur pour du C, puis abandonné le C pour les langages sur la JVM ou la CLR, et maintenant se penche encore plus sur les langages de scripts comme PHP ruby ou python. Ce n&#8217;est pas pour rien, c&#8217;est que sauf cas exceptionnels le temps perdu en allant plus près du processeur c&#8217;est du temps sur lequel on ne travaille pas l&#8217;archi, le réseau, les algos &#8230; et qu&#8217;au final on ne s&#8217;y retrouve pas vraiment.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Philippe Humeau</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1058</link>
		<dc:creator>Philippe Humeau</dc:creator>
		<pubDate>Mon, 08 Mar 2010 17:06:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1058</guid>
		<description>Nous en sommes effectivement à chercher les gains là où il en reste. Une fois les I/O optimisées en activant la concaténation de librairies (mage_compiler pour magento) et en ne gérant que des I/O en RAMdisk, une fois les fooman speedster et autres optimiser de js/css installés, une fois que les reverses proxy prennent en charge les fichiers statiques, une fois os, noyau et hardware optimisé, il nous reste peu d&#039;autres axes d&#039;optimisation. Même les accès réseau se font en Gb/s ce qui est plus rapide qu&#039;un transfert sur disque dur la plupart du temps (quoique les &quot;disques&quot; eux aussi sont réseau sur NAS ou SAN).

Actuellement, nos machines ne swap pas, n&#039;utilise quasi par leurs disques, elles utilisent du CPU. 90% de celui-ci est dédié à PHP, le reste étant du apache et des gestions de requêtes ou de l&#039;OS. Actuellement c&#039;est vraiment les seuls processus qui consomment et ils consomment réellement du CPU, peut importe que l&#039;on ait Zend ou APC. 

Merci pour ton post sur typepad au sujet de hip hop. 

Déjà, même si l&#039;on ne parle que de 50%, ca vaut le coup ! C&#039;est énorme comme gain. Bon visiblement, ce n&#039;est pas gagné car il y a des limites à prendre en compte, des choses à tester et avant que Zend ou Varien certifie le produit dessus... On peut attendre mais le chemin est le bon je crois. 

Quand à Apache, effectivement c&#039;est un fat_boy. Il est temps de composer avec les alternatives et que celles-ci montent en puissance. Le libre a encore des pas à faire dans ce domaine. Zeus est très puissant mais payant et nginx n&#039;est pas encore assez supporté (notamment par Zend), les initiatives fleurissent mais ont du mal à se débarrasser du grand père.</description>
		<content:encoded><![CDATA[<p>Nous en sommes effectivement à chercher les gains là où il en reste. Une fois les I/O optimisées en activant la concaténation de librairies (mage_compiler pour magento) et en ne gérant que des I/O en RAMdisk, une fois les fooman speedster et autres optimiser de js/css installés, une fois que les reverses proxy prennent en charge les fichiers statiques, une fois os, noyau et hardware optimisé, il nous reste peu d&#8217;autres axes d&#8217;optimisation. Même les accès réseau se font en Gb/s ce qui est plus rapide qu&#8217;un transfert sur disque dur la plupart du temps (quoique les &#8220;disques&#8221; eux aussi sont réseau sur NAS ou SAN).</p>
<p>Actuellement, nos machines ne swap pas, n&#8217;utilise quasi par leurs disques, elles utilisent du CPU. 90% de celui-ci est dédié à PHP, le reste étant du apache et des gestions de requêtes ou de l&#8217;OS. Actuellement c&#8217;est vraiment les seuls processus qui consomment et ils consomment réellement du CPU, peut importe que l&#8217;on ait Zend ou APC. </p>
<p>Merci pour ton post sur typepad au sujet de hip hop. </p>
<p>Déjà, même si l&#8217;on ne parle que de 50%, ca vaut le coup ! C&#8217;est énorme comme gain. Bon visiblement, ce n&#8217;est pas gagné car il y a des limites à prendre en compte, des choses à tester et avant que Zend ou Varien certifie le produit dessus&#8230; On peut attendre mais le chemin est le bon je crois. </p>
<p>Quand à Apache, effectivement c&#8217;est un fat_boy. Il est temps de composer avec les alternatives et que celles-ci montent en puissance. Le libre a encore des pas à faire dans ce domaine. Zeus est très puissant mais payant et nginx n&#8217;est pas encore assez supporté (notamment par Zend), les initiatives fleurissent mais ont du mal à se débarrasser du grand père.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Philippe Humeau</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1057</link>
		<dc:creator>Philippe Humeau</dc:creator>
		<pubDate>Mon, 08 Mar 2010 16:52:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1057</guid>
		<description>
Un programme PHP n&#039;est pas autonome, il a besoin d&#039;autre binaire pour s&#039;exécuter, ce qui n&#039;est pas le cas d&#039;un programme compilé. Plusieurs définition de &quot;compilé&quot; existe. J&#039;ai vu la définition suivante donné sur un article : 

&lt;em&gt;&quot;PHP 4 introduced the the Zend engine. This engine splits the processing of PHP code into several phases. The first phase parses PHP source code and generates a binary representation of the PHP code known as Zend opcodes. Opcodes are sets of instructions similar to Java bytecodes. These opcodes are stored in memory. The second phase of Zend engine processing consists in executing the generated opcodes.&quot;&lt;/em&gt;

Parser le source, générer un binaire puis executer des opcodes... Voyons voir, comme parser un source en C, le compiler et écrire sa représentation binaire puis l&#039;exécuter? Ou presque. Il reste nécessaire d&#039;avoir ce compilo/VM qui s&#039;exécute et certaines opération se répètent. Un binaire se lance en RAM et y reste jusqu&#039;à nouvel ordre. L&#039;assembleur est stocké en mémoire puis parcouru mais pas de relecture ou rechargement. La définition de compilateur est bien de générer un bytecode ou pseudo bytecode (opcode) mais la différence réside dans le fait de le faire régulièrement ou une seul fois dans le cas qui nous occupe.

De la même façon, Java se compile pour être exécuter dans une VM au final. Ma pensé derrière le terme compilé est celle lié à la génération d&#039;un bytecode directement exploitable par la machine, sans intermédiaire. Comme un code C traduit en assembleur. La démarche de HipHop m&#039;intéresse donc à ce titre.

APC réduit effectivement le temps d&#039;exécution mais les process PHP pullulent quand même en mémoire et mangent un sacré paquet de temps CPU. 

Quand aux &quot;traducteurs&quot; (injustement assimilé au compilateur dans mon article), oui, ils peuvent aider, en tout cas je le pense même si cela reste une opinion à étayer par un benchmark. Utiliser Hip Hop et Gcc avec un code C++ sera beaucoup plus efficace que de lire et relire le même bout de code en boucle. Par ailleurs les programmes en C/C++ sont beaucoup plus optimisés puisqu&#039;ils tournent de manière très proche du processeur.

La couche VM est consommatrice de ressource par essence et pas forcément utile, si ce n&#039;est pour la portabilité. Mais il vaut mieux avoir un code nativement optimisé pour le processeur. Je suis donc malgré tout confiant dans cet avenir, peut être que les gens de Facebook le sont aussi sinon ils n&#039;auraient pas regardé dans cette direction ne pensez-vous pas ?

Quand au coté &quot;dynamique&quot;, il s&#039;agit juste de réagir différemment en fonction du résultat d&#039;un requête ou de la valeur d&#039;une variable, ce que font aussi les langages compilés depuis bien longtemps. L&#039;opposition n&#039;est pas entre dynamique et compilé mais entre interprété et compilé. Je vous rejoins par contre sur le fait que le typage faible (assistance aux développeurs peu intéressés par les contingences de ressources à mon sens), est un handicape à la performance et à la capacité à en faire un langage compilé.

Je vous rejoins aussi sur le compromis vitesse de dev / vitesse d&#039;exécution. Il s&#039;agit même de ne pas fermer le club des développeurs car peu d&#039;entre eux veulent se frotter à la gestion de la mémoire et au typage fort. Qui n&#039;a jamais hurlé devant un core dump a 3H du matin avec son GDB. Je comprends donc les développeurs qui veulent confier cela à des framework, des interpréteurs ou des garbages collector mais on perd en optimisation.</description>
		<content:encoded><![CDATA[<p>Un programme PHP n&#8217;est pas autonome, il a besoin d&#8217;autre binaire pour s&#8217;exécuter, ce qui n&#8217;est pas le cas d&#8217;un programme compilé. Plusieurs définition de &#8220;compilé&#8221; existe. J&#8217;ai vu la définition suivante donné sur un article : </p>
<p><em>&#8220;PHP 4 introduced the the Zend engine. This engine splits the processing of PHP code into several phases. The first phase parses PHP source code and generates a binary representation of the PHP code known as Zend opcodes. Opcodes are sets of instructions similar to Java bytecodes. These opcodes are stored in memory. The second phase of Zend engine processing consists in executing the generated opcodes.&#8221;</em></p>
<p>Parser le source, générer un binaire puis executer des opcodes&#8230; Voyons voir, comme parser un source en C, le compiler et écrire sa représentation binaire puis l&#8217;exécuter? Ou presque. Il reste nécessaire d&#8217;avoir ce compilo/VM qui s&#8217;exécute et certaines opération se répètent. Un binaire se lance en RAM et y reste jusqu&#8217;à nouvel ordre. L&#8217;assembleur est stocké en mémoire puis parcouru mais pas de relecture ou rechargement. La définition de compilateur est bien de générer un bytecode ou pseudo bytecode (opcode) mais la différence réside dans le fait de le faire régulièrement ou une seul fois dans le cas qui nous occupe.</p>
<p>De la même façon, Java se compile pour être exécuter dans une VM au final. Ma pensé derrière le terme compilé est celle lié à la génération d&#8217;un bytecode directement exploitable par la machine, sans intermédiaire. Comme un code C traduit en assembleur. La démarche de HipHop m&#8217;intéresse donc à ce titre.</p>
<p>APC réduit effectivement le temps d&#8217;exécution mais les process PHP pullulent quand même en mémoire et mangent un sacré paquet de temps CPU. </p>
<p>Quand aux &#8220;traducteurs&#8221; (injustement assimilé au compilateur dans mon article), oui, ils peuvent aider, en tout cas je le pense même si cela reste une opinion à étayer par un benchmark. Utiliser Hip Hop et Gcc avec un code C++ sera beaucoup plus efficace que de lire et relire le même bout de code en boucle. Par ailleurs les programmes en C/C++ sont beaucoup plus optimisés puisqu&#8217;ils tournent de manière très proche du processeur.</p>
<p>La couche VM est consommatrice de ressource par essence et pas forcément utile, si ce n&#8217;est pour la portabilité. Mais il vaut mieux avoir un code nativement optimisé pour le processeur. Je suis donc malgré tout confiant dans cet avenir, peut être que les gens de Facebook le sont aussi sinon ils n&#8217;auraient pas regardé dans cette direction ne pensez-vous pas ?</p>
<p>Quand au coté &#8220;dynamique&#8221;, il s&#8217;agit juste de réagir différemment en fonction du résultat d&#8217;un requête ou de la valeur d&#8217;une variable, ce que font aussi les langages compilés depuis bien longtemps. L&#8217;opposition n&#8217;est pas entre dynamique et compilé mais entre interprété et compilé. Je vous rejoins par contre sur le fait que le typage faible (assistance aux développeurs peu intéressés par les contingences de ressources à mon sens), est un handicape à la performance et à la capacité à en faire un langage compilé.</p>
<p>Je vous rejoins aussi sur le compromis vitesse de dev / vitesse d&#8217;exécution. Il s&#8217;agit même de ne pas fermer le club des développeurs car peu d&#8217;entre eux veulent se frotter à la gestion de la mémoire et au typage fort. Qui n&#8217;a jamais hurlé devant un core dump a 3H du matin avec son GDB. Je comprends donc les développeurs qui veulent confier cela à des framework, des interpréteurs ou des garbages collector mais on perd en optimisation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : jpvincent</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1056</link>
		<dc:creator>jpvincent</dc:creator>
		<pubDate>Mon, 08 Mar 2010 14:38:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1056</guid>
		<description>les vrais bottlenecks en PHP comme en JS ne sont pas dépendants des langages eux même, il est important de les connaître car lorsqu&#039;on veut optimiser un code, on commence par ce qui prend le plus de temps  :

Fais du profiling sur un site un peu complexe, côté PHP ce qui va ressortir le plus souvent, ce sont :
- les accès disque (autoinclude de dizaines de classes, caching, templating ... )
- les accès réseau (rapatriement des données de la base, contact d&#039;API externes ...)
Et après seulement tu vas commencer à voir les limites du langage dans certains cas précis, par exemple si tu fais beaucoup de templating, tu vas voir les manipulations de string et les regexp qui prennent du temps CPU

Côté browser, c&#039;est la même histoire si l&#039;on fait du profiling : 
- le browser passe son temps à attendre des css et des fichiers javascript, pendant ce temps la page est soit blanche soit inaccessible
- chaque inclusion de widget ou plus fréquemment de pub bloque aussi le rendu, le temps d&#039;être retrouvé puis exécuté
- une fois toute la page chargée, ce sont les manipulations dans le DOM qui donnent des coups de freeze (animations, insertions de contenu ...)
Et après seulement on tombe sur les limites de JS, la principale étant la manipulation des strings.

Bref, connaître des astuces de manipulations de string en PHP et en JS c&#039;est bien, et il faut les appliquer si ça ne rend pas le code illisible pour les autres, mais c&#039;est illusoire de compter là dessus :)

en aparté, pour + de background sur HipHop PHP : http://jpv.typepad.com/blog/2010/02/facebook-php-compiler-hiphop-php-les-limites.html
voir en particulier les liens en bas, il y a un bench où HPHP s&#039;en sort bien, mais c&#039;est une solution que l&#039;on peut commencer à utiliser quand on a déjà traité les autres (réseau, disque)</description>
		<content:encoded><![CDATA[<p>les vrais bottlenecks en PHP comme en JS ne sont pas dépendants des langages eux même, il est important de les connaître car lorsqu&#8217;on veut optimiser un code, on commence par ce qui prend le plus de temps  :</p>
<p>Fais du profiling sur un site un peu complexe, côté PHP ce qui va ressortir le plus souvent, ce sont :<br />
- les accès disque (autoinclude de dizaines de classes, caching, templating &#8230; )<br />
- les accès réseau (rapatriement des données de la base, contact d&#8217;API externes &#8230;)<br />
Et après seulement tu vas commencer à voir les limites du langage dans certains cas précis, par exemple si tu fais beaucoup de templating, tu vas voir les manipulations de string et les regexp qui prennent du temps CPU</p>
<p>Côté browser, c&#8217;est la même histoire si l&#8217;on fait du profiling :<br />
- le browser passe son temps à attendre des css et des fichiers javascript, pendant ce temps la page est soit blanche soit inaccessible<br />
- chaque inclusion de widget ou plus fréquemment de pub bloque aussi le rendu, le temps d&#8217;être retrouvé puis exécuté<br />
- une fois toute la page chargée, ce sont les manipulations dans le DOM qui donnent des coups de freeze (animations, insertions de contenu &#8230;)<br />
Et après seulement on tombe sur les limites de JS, la principale étant la manipulation des strings.</p>
<p>Bref, connaître des astuces de manipulations de string en PHP et en JS c&#8217;est bien, et il faut les appliquer si ça ne rend pas le code illisible pour les autres, mais c&#8217;est illusoire de compter là dessus <img src='http://www.wikigento.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>en aparté, pour + de background sur HipHop PHP : <a href="http://jpv.typepad.com/blog/2010/02/facebook-php-compiler-hiphop-php-les-limites.html" rel="nofollow">http://jpv.typepad.com/blog/2010/02/facebook-php-compiler-hiphop-php-les-limites.html</a><br />
voir en particulier les liens en bas, il y a un bench où HPHP s&#8217;en sort bien, mais c&#8217;est une solution que l&#8217;on peut commencer à utiliser quand on a déjà traité les autres (réseau, disque)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Eric D.</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1055</link>
		<dc:creator>Eric D.</dc:creator>
		<pubDate>Mon, 08 Mar 2010 13:31:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1055</guid>
		<description>Mouais, sauf que PHP n&#039;est plus réellement un langage interprété depuis perpet. C&#039;est bien une compilation en langage intermédiaire avec une simili VM qui exécute ensuite qui se passe. Au final si on passe deux fois sur la même partie de code, on ne réinterprête pas le code.

Ca fait aussi bien longtemps que le code n&#039;est même plus interprété à chaque requête mais qu&#039;on cache l&#039;opcode (c&#039;est dire justement le résultat de cette compilation) via APC ou d&#039;autres. Bref, ne reste que l&#039;exécution dans la VM de PHP.

Bref, vue la fiabilité de l&#039;analyse de l&#039;article, autant ne pas analyser. Quant aux &quot;compilateurs&quot;, il y a eu des essais vers la JVM, vers le CLR, et le HipHop de facebook, à défaut d&#039;être un réel compilateur, permet de faire passer par l&#039;étape C++ pour obtenir bel et bien du code binaire exécutable directement.

Certes PHP n&#039;est pas une foudre de guerre, mais le principal c&#039;est surtout du à l&#039;aspect dynamique, pas tellement à la VM ou au manque de compilation en code binaire. Le typage faible dynamique, ça coute cher, c&#039;est ainsi.

Tout est une question de compromis entre la vitesse de développement et la vitesse d&#039;exécution.</description>
		<content:encoded><![CDATA[<p>Mouais, sauf que PHP n&#8217;est plus réellement un langage interprété depuis perpet. C&#8217;est bien une compilation en langage intermédiaire avec une simili VM qui exécute ensuite qui se passe. Au final si on passe deux fois sur la même partie de code, on ne réinterprête pas le code.</p>
<p>Ca fait aussi bien longtemps que le code n&#8217;est même plus interprété à chaque requête mais qu&#8217;on cache l&#8217;opcode (c&#8217;est dire justement le résultat de cette compilation) via APC ou d&#8217;autres. Bref, ne reste que l&#8217;exécution dans la VM de PHP.</p>
<p>Bref, vue la fiabilité de l&#8217;analyse de l&#8217;article, autant ne pas analyser. Quant aux &#8220;compilateurs&#8221;, il y a eu des essais vers la JVM, vers le CLR, et le HipHop de facebook, à défaut d&#8217;être un réel compilateur, permet de faire passer par l&#8217;étape C++ pour obtenir bel et bien du code binaire exécutable directement.</p>
<p>Certes PHP n&#8217;est pas une foudre de guerre, mais le principal c&#8217;est surtout du à l&#8217;aspect dynamique, pas tellement à la VM ou au manque de compilation en code binaire. Le typage faible dynamique, ça coute cher, c&#8217;est ainsi.</p>
<p>Tout est une question de compromis entre la vitesse de développement et la vitesse d&#8217;exécution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Philippe Humeau</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1054</link>
		<dc:creator>Philippe Humeau</dc:creator>
		<pubDate>Mon, 08 Mar 2010 09:13:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1054</guid>
		<description>En fait je pense que c&#039;est prometteur si on peut détecter les changements. En gros l&#039;idée qu&#039;on poursuit en interne c&#039;est de faire la requête sur le front et sur un compilo en parallèle. Si des changements ont eu lieu et nécessitent la recompilation de la page, alors on rafraichit, sinon on laisse la page présente. Vu le gain de perfs, on peut facilement envisager de faire cette &quot;veille&quot; en continue.</description>
		<content:encoded><![CDATA[<p>En fait je pense que c&#8217;est prometteur si on peut détecter les changements. En gros l&#8217;idée qu&#8217;on poursuit en interne c&#8217;est de faire la requête sur le front et sur un compilo en parallèle. Si des changements ont eu lieu et nécessitent la recompilation de la page, alors on rafraichit, sinon on laisse la page présente. Vu le gain de perfs, on peut facilement envisager de faire cette &#8220;veille&#8221; en continue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : maddog</title>
		<link>http://www.wikigento.com/optimisation-lampzendmagento/javascript-php-performances/comment-page-1/#comment-1046</link>
		<dc:creator>maddog</dc:creator>
		<pubDate>Sat, 06 Mar 2010 19:53:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.wikigento.com/?p=1372#comment-1046</guid>
		<description>Les gars de chez facebook ils ont sortit un truc dans le genre récement.
ça s&#039;appelle HipHop
http://developers.facebook.com/news.php?blog=1&amp;story=358

Je suis d&#039;accord sur le fond. mais tu imagine la galère s&#039;il fallait recompiler une page php à chaque modification (la plus part des modifications sont mineures en général).</description>
		<content:encoded><![CDATA[<p>Les gars de chez facebook ils ont sortit un truc dans le genre récement.<br />
ça s&#8217;appelle HipHop<br />
<a href="http://developers.facebook.com/news.php?blog=1&amp;story=358" rel="nofollow">http://developers.facebook.com/news.php?blog=1&amp;story=358</a></p>
<p>Je suis d&#8217;accord sur le fond. mais tu imagine la galère s&#8217;il fallait recompiler une page php à chaque modification (la plus part des modifications sont mineures en général).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
