Forum de discussion et d'aide au php
Vous n'êtes pas identifié.
|
Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides. FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans. Proposez vos news : si vous avez un evenement à annoncer le chat : venez discuter de php. |
||
Bonjour,
Il y a 2 choses à considérer:
Texte soit on est provider ou on a les autorisations comme tels et dans ce cas, le vrai test consisterai à comparer des produits qui généreraient vraiment du code. Par exemple C, C++, Delphi etc. avec ce produit. Cela m'étonnerait qu'il soit plus rapide, vu que c'est un produit de traduction.
soit
on n'est que client et je pense pas qu'un provider responsable sera d'accord d'avoir du binaire étranger sur sa machine avec tous les problèmes de virus etc.
donc pas de panique, pour des applications amateurs, on en reste probablement encore longtemps au language interprété lisible.
Il reste la possibilité qu'il installe cet accélérateur et que ce soit un service supplémentaire. Cependant en principe, les problèmes de vitesse que l'on peut rencontrer sont rarement à cause du traitement du code, au niveau commercial,
(au niveau scientific, je reserve mes propos), mais au niveau du code lui-même et de l'engorgement éventuel dû à une machine sous dimensionnée.
Hors ligne
C'est ma News ^^
Hors ligne
Ma remarque n'était pas dans un but de dénigrer une réponse Open_source à un programme payant. C'est très bien et il peut y avoir pas mal d'applications qui le justifient.
Je voulais juste souligner que pour un projet neuf, il ne faut pas partir dans cette optique avant d'avoir comparé avec des logiciels qui sont faits pour.
La comparaison proposée est à mon avis un peu trop orientée. Elle ne cite pas de programmes "professionnels" cités.
Et surtout, je voulais rendre attentif que ce choix n'est pas forcément une panacée à un problème qui a peut-être une tout autre origine.
Je me trompe peut-être?
PS dans la réponse rapide, je trouve dommage que l'on ne puisse pas pré visualiser
Hors ligne
Les produits Zend à 1000$ l'année ne sont pas des programmes "professionnels" ? Avant d'investir dans leurs soft, il faut que tu sois sûr de ton activité... car c'est un budget conséquent !
michel a écrit:
Et surtout, je voulais rendre attentif que ce choix n'est pas forcément une panacée à un problème qui a peut-être une tout autre origine.
Tu peux détailler stp ?
Dernière modification par LeSkaMan (19-05-2006 08:45:09)
Hors ligne
Le prix ne fait pas le professionalisme. Les programmes professionls que je citais sont des programmes tels que Delphi, C, C++. Tu ne fais pas un programme prévu pour être interprété et ensuite tu le compiles, ce sont des logiciels où tu parts avec l'option directe que le programme sera compilé. (autrement, il est inutilisable)
En faisant un paralèlle, le programme prévu est comme une voiture de grand tourisme et la compilation la transforme en voiture de course.
Les logiciels que je cite sont des voitures F1. (que tu ne peux pas utiliser normalement pour aller draguer les nanas, à l'inverse d'une porsche, où ça marche assez bien)
Il est arrivé que Porsche gagne des grands prix, mais ce n'est pas la règle.
Pour la remarque que ce n'est pas forcément la panacée des problèmes de rapidité, j'ai déjà cité l'engorgement des sites, la mauvaise programmation etc
Hors ligne
Delphi , C , C++ ne sont pas des programmes, mais des languages de programmation. Je penses que Zend et Turck MMCache sont des soft codé en C++... donc je ne vois vraiment pas ton problème en faite ^^
J'ai beau relire .... je ne comprend pas !
En tout cas, moi je trouve que le fait d'accélerer et de codé des script php pro, c'est plutôt pas mal
Hors ligne
LeSkaMan a écrit:
Delphi , C , C++ ne sont pas des programmes, mais des languages de programmation
C'est juste, c'est une faute de language.
Ce que je voulais dire, c'est que probablement la compilation en language machine, d'un code fait pour être interprété, est certainement moins bonne qu'un code fait pour être directement compilé.
Ce n'est peut-être pas vrai, mais dans le passé, cela s'est vérifié plusieurs fois
notament avec le basic où l'on a créer des logiciels pour faire du code machine.(VB)
c'était incomparablement plus lourd, lent etc qu'un programme pascal ou fortran.
Les languages de programmation proposés font une première étape dans laquelle ils transforment du code PHP en C++ ou C, je ne sais pas. Ênsuite le C++ est compilé en code machine.
Avec les logiciels dont je te parle, ils sont directement compilés.
En faisant une comparaison hasardeuse: Tu crée une page sur Word ou en Netscape et tu la sauves en html. (je crois que Flash ne fait pas mieux)
A première vue c'est parfait, jusqu'à ce que tu voies le code! Un fichier fait par ce moyen est en moyenne 10 plus volumineux que si tu le fais directement en code html et surtout 20 fois plus lent. Les répétitions inutiles sont la règle et ceci se paie.
En gros, il y a fort à parier qu'en ajoutant une étape, par facilité, dans le développement d'un logiciel, tu n'apportes pas une amélioration des performances. C'est pas évident?
C'est ce qu'il faut comprendre au niveau de la démonstration de rapidité.
C'est comme dire que la voiture la plus rapide C'est Peugeot par exemple: si tu ne prends que Fiat, Volkswagen et autres voiture GT, sans comparer avec une formule 1.
Grossièrement dit: le plus rapide est le language machine. ensuite vient l'assembler, ensuite les languages de programmation qui sont compilés directement, ensuite les programmes qui traduisent un logiciel écrit pour être interprétés en un des languages précédents et pour finir les languages interprétés.
Comme je l'ai dit, je ne condamne pas ces logiciels, au contraire surtout l'Open source, mais je mets simplement en garde que si les problèmes sont d'un autre ordre, (engorgement etc) cela ne résoudra pas grand chose.
Hors ligne
michel a écrit:
Les languages de programmation proposés font une première étape dans laquelle ils transforment du code PHP en C++ ou C, je ne sais pas. Ênsuite le C++ est compilé en code machine.
Excuse moi de te dire que ca ...mais je trouve ca abérant !
Lorsque l'on code un programme en C ou C++, on doit le compiler pour qu'il soit interprétable par la machine.
Lorsque l'on code un soft en PHP, il s'execute au fur et à mesure , et il n'y a aucune compilation en jeu.
Je pense qu'il faut plus considérer le serveur php comme un gros logiciel avec lequel on travail, et à qui on demande d'effectuer un traitement sur des données.
"Tu me déclares tel variable ici !" / "Tu m'affiche l'heure du jour" / "Tu me concatènes ces deux variables"
D'ailleur en parlant de concaténation, pour tout les languages autre que scripts, ce n'est pas possible... ce qui semble totalement logique d'ailleur.
C'est peut-être clair dans ta tête, mais ya une sacré différence entre les languages de programmation qui demande à être compilé, et les language d'interpration qui demande à être interprété par le serveur ...
Je me trompe ?
P.S : je ne comprend toujour pas pourquoi tu ne trouve pas génial l'idée d'accélérer l'execution des script php ...
Dernière modification par LeSkaMan (23-05-2006 11:40:36)
Hors ligne
Que fait l'accélérateur de programme?
Il transforme ton source PHP en C dans une première étape, puis il fait un binaire avec cela.
Le gain de temps que l'on obtient provient que justement ton programme ne passe plus par un interpréteur, mais tourne directement en language machine à l'appel du programme.
Je n'ai pas dit qu'il ne fallait pas accélérer les programmes. J'ai simplement dit que lors d'un problème de vitesse, cela va faire des déçus.
Prends l'exemple d'un hébergeur mal équipé (le tien?). Ton programme tourne en PHP en 0.4 sec avec un accélérateur en 0.004s
la sortie de chez l'hébergeur, elle prend 30 secondes. Proportionnellement qu'est-ce que tu as gagné?
(ces chiffres sont évidement faux et exagérés pour faire comprendre le problème)
faisons une comparaison en hydraulique:
Tu as un bassin avec un écoulement par un tout petit tuyau. Tu mets une turbine qui double la hauteur d'eau à la sortie du bassin. cela ne va pas augmenter ton débit sensiblement par rapport à élargissement important du tuyau de sortie.
Hors ligne
LeSkaMan a écrit:
michel a écrit:
Les languages de programmation proposés font une première étape dans laquelle ils transforment du code PHP en C++ ou C, je ne sais pas. Ênsuite le C++ est compilé en code machine.
Excuse moi de te dire que ca ...mais je trouve ca abérant !
Pourquoi? car c'est comme cela que cela se passe.
LeSkaMan a écrit:
[Lorsque l'on code un programme en C ou C++, on doit le compiler pour qu'il soit interprétable par la machine.
Lorsque l'on code un soft en PHP, il s'execute au fur et à mesure , et il n'y a aucune compilation en jeu.
Si tu penses que le code PHP n'est pas traduit en language machine, tu te trompes lourdement. C'est ce qui rend les scripts à interpréter si long. La machine doit traduire en code machine au fur et à mesure de l'avancement du programme.
L'accélérateur, au contraire traduit à l'avance le programme et tu n'as pas besoin de le traduire en language machine lors de son appel. C'est là le gain de temps.
LeSkaMan a écrit:
Je pense qu'il faut plus considérer le serveur php comme un gros logiciel avec lequel on travail, et à qui on demande d'effectuer un traitement sur des données.
"Tu me déclares tel variable ici !" / "Tu m'affiche l'heure du jour" / "Tu me concatènes ces deux variables"
D'ailleur en parlant de concaténation, pour tout les languages autre que scripts, ce n'est pas possible... ce qui semble totalement logique d'ailleur.
Pourquoi ce ne serait pas possible? tout ce que tu peux faire avec un language interprété, tu peux le faire avec un language de programmation. (facilement ou pas c'est un autre problème)
LeSkaMan a écrit:
C'est peut-être clair dans ta tête, mais ya une sacré différence entre les languages de programmation qui demande à être compilé, et les language d'interpration qui demande à être interprété par le serveur ...
Je me trompe ?
Qu'il y ait une différence, personne le conteste. Par contre sur la différence, je pense que tu te trompes.
LeSkaMan a écrit:
P.S : je ne comprend toujour pas pourquoi tu ne trouve pas génial l'idée d'accélérer l'execution des script php ...
Je n'irai pas jusqu'à trouver du génie. Cela peut être utile, certainement.
Cependant pour un produit commercial, la déontologie d'un programmeur professionel devrait l'empêcher d'utiliser ces moyens pour les raisons que je t'ai expliqué.
Hors ligne
Bonjour,
TurckMMCache a été crée par Dmitry Stogov pour le compte d'une société. L'objectif était de fournir un cache d'opcode pour accélerer des applications écrites en PHP, et aussi offrir un moyen de "compiler" des scripts php afin de rendre les sources illisibles (encodage, un peu plus poussé qu'une simple obfuscation).
Dmitry Stogov a été recruté par Zend. Depuis le projet TurckMMCache a été abandonné.
eAccelerator est un "fork" (la suite) de turckmmcache, basé sur le même code source, et qui évolue avec 2 developpeurs (pour l'instant) Bart (belge) et Hans (allemand), ainsi qu'une bonne cinquantaine de contributeurs plus ou moins anonymes.
eAccelerator optimise et conserve le résultat de la compilation d'un script PHP (opcode = code intérmédiaire) en mémoire partagée ou fichier texte. Ainsi, lorsque le script est rappellé, le process qui transforme le script php en opcode executable par le Zend Engine (le moteur php en fait) n'a pas besoin d'être ré-executé, ce qui apporte, en fonction du code lui même, un gain en performance qui peut osciller entre 3% et ... 3000% en performance BRUTE. Je met volontairement le mot brute en majuscule car faire un code de 10 lignes qui contient 5 requetes SQL ne bénéficiera que d'un très faible gain en performance. Par contre, avec un algorythme 100% php, non dépendant d'accès à des composants externes (SQL, fonction stream*, curl*, ...), on pourra observer une diminution du temp d'exécution considérable.
Contrairement a ce que j'ai pu le lire un peu plus bas, le code PHP n'est pas réécrit à la volée en C ou C++. eAccelerator ou TurckMMCache ou même Zend Accelerator ne sont que des "caches" de code intermédiaire.
Déroulement = Script PHP -> transformation en code intérmédiaire par l'interpreteur PHP executable par Zend Engine -> Zend Engine -> language machine -> execution.
Le principe de l'acceleration via un cache d'opcode est fiable et ne pose pas de gros probleme. Par contre, l'encodage en est un. En effet, les instructions du code intermédiaire (opcode) sont susceptibles de varier à chaque version de php ou presque. Un code PHP encodé avec eAccelerator (ou turckMMCache) version X et PHP version Y ne fonctionnera peut etre pas avec eAccelerator version X2 et PHP version Y2.
D'ou, par exemple, la nécessité de supprimer les fichiers du cache eAccelerator et/ou redémarrer apache après une mise à jour eAccelerator/php.
Enfin, pour des raisons très techniques et justifiée, sachez qu'eAccelerator ne fonctionne pas en CGI pure (ca fonctionne avec fastCGI) ni en CLI (command line interface). En effet, il y a une notion de mémoire partagée (shared memory) qui n'est accessible que dans un environnement type serveur web avec php compilé en module ou "inside".
En esperant vous avoir apporté quelques lumières...
Cordialement,
Franck T.
Administrateur du projet eAccelerator.
Hors ligne
Merci beaucoup pour cette éclairsissement !
Mais, lorsque tu appelles une page php, et qu'elle s'execute sur le serveur ... on ne peux pas comparer ca à la compilation d'un programme en C++ ? Si ?
En tout cas merci beaucoup d'être venu nous parler de eAccelerator !
Hors ligne
> Merci beaucoup pour cette éclairsissement !
Pas de quoi. Ceci dit, si je rentre vraiment trop dans l'aspect technique, il est fort probable que je commence a dire des bétises. Alors je me suis arrété aux questions que vous vous posiez. Si vraiment vous désirez comprendre le fin fond de l'histoire et le pourquoi du comment de la chose, rendez vous sur irc #eaccelerator (freenode) - anglais indispensable ![]()
> Mais, lorsque tu appelles une page php, et qu'elle s'execute sur le serveur ... on ne peux pas comparer ca à la compilation
> d'un programme en C++ ? Si ?
L'idée, le principe, oui pourquoi pas, on peut comparer, mais c'est très grossier.
Un script PHP sans cache d'opcode est "recompilé" à chaque fois que la page est demandée. Avec un cache d'opcode, le script PHP est "compilé" puis le résultat de la compilation est stocké dans la mémoire vive ou sur le disque afin d'être directement rappellé si le script en question est à nouveau sollicité. Cela évite au serveur d'avoir a "recompiler" le script en question à chaque fois.
Fait un module apache en C pour afficher "bonjour" et fait la meme en PHP, les performances n'ont strictement rien à voir. Le module apache C n'a pas besoin d'être interprété/compilé à chaque fois, il s'execute directement, contrairement a un script PHP.
L'opcode généré par turckMMCache ou eAccelerator ne peut pas être utilisé sans le Zend Engine, alors, on ne peut pas vraiment comparer avec un programme en C qui lui, une fois compilé, est utilisable tout seul (sauf dépendances librairies et plateforme, certes, ...)
> En tout cas merci beaucoup d'être venu nous parler de eAccelerator !
Pas de quoi, google alert m'avertis de tous les nouveaux sites parlant de turckmmcache, alors j'en profite pour expliquer la transition vers eAccelerator ..
Cdt,
Franck T.
Hors ligne
Si tu met ' compilé ' entre guillemets pour parler de php... cela signifie qu'il n'y a pas une réel compilation ?
Le chemin qu'a donnée michel est-il juste ? Script php traduit en C++ qui est ensuite compilé machine ...
Donc si j'ai bien comprit, pour faire marcher votre eAccelerator ou votre turckMMCache, il faut d'abord installer sur notre serveur Zend Engine ... qui doit coûter une petite fortune ? ^^ Non ?
Si je dis que php avec eAccelerator ressemble au jsp ( point de vu de l'execution ), je dis une absurdité ?
Merci pour tes lumières !
Yo.
Dernière modification par LeSkaMan (28-05-2006 04:44:45)
Hors ligne