web-dev-qa-db-fra.com

Est-il utile de réduire PHP?

Je sais que vous pouvez minimiser PHP, mais je me demande s'il y a un point. PHP est un langage interprété donc fonctionnera un peu plus lentement qu'un langage compilé. Ma question est: les clients verraient-ils une amélioration visible de la vitesse de chargement des pages et ainsi si je devais minimiser mon PHP?

Existe-t-il également un moyen de compiler PHP ou quelque chose de similaire?

96
Bojangles

PHP est compilé en bytecode, qui est ensuite interprété au-dessus de quelque chose qui ressemble à une machine virtuelle. De nombreux autres langages de script suivent le même processus général, y compris Perl et Ruby. Ce n'est pas vraiment un langage traditionnel interprété comme, disons, BASIC.

Il n'y aurait pas d'augmentation de vitesse effective si vous tentiez de "réduire" la source. Vous obtiendriez une augmentation importante en utilisant un cache de bytecode comme APC .

Facebook a introduit un compilateur nommé HipHop qui transforme PHP source en code C++. Rasmus Lerdorf, l'un des grands PHP les gars ont fait un présentation pour Digg plus tôt cette année qui couvre les améliorations de performances apportées par HipHop. En bref, ce n'est pas beaucoup plus rapide que d'optimiser le code et d'utiliser un cache de bytecode. HipHop est exagéré pour la majorité des utilisateurs.

Facebook a également récemment dévoilé HHVM , une nouvelle machine virtuelle basée sur leur travail de création de HipHop. C'est encore assez nouveau et on ne sait pas si cela donnera un coup de fouet aux performances du grand public.

Juste pour vous assurer qu'il est indiqué expressément, veuillez lire cette présentation en entier. Il indique de nombreuses façons de comparer et de profiler le code et d'identifier les goulots d'étranglement à l'aide d'outils tels que xdebug et xhprof , également de Facebook.

155
Charles

Renoncer à l'idée de minimiser PHP en faveur de l'utilisation d'un cache d'opcode, comme PHP Accelerator , ou APC .

Ou autre chose comme memcached

14
Stephen

Avec une réécriture (noms de variables plus courts), vous pourriez économiser quelques octets de mémoire, mais c'est aussi rarement significatif.

Cependant, je conçois certaines de mes applications d'une manière qui permet de concaténer des scripts d'inclusion ensemble. Avec php -w il peut être compacté de manière significative, ajoutant un petit gain de vitesse pour le démarrage du script. Sur un serveur compatible opcode, cela n'économise cependant que quelques vérifications de mtime de fichier.

3
mario

C'est moins une réponse qu'une annonce. Je travaille sur une extension PHP qui traduit les opcodes Zend pour fonctionner sur un VM avec une saisie statique. Elle n'accélère pas arbitrairement PHP code. Il vous permet d'écrire du code qui s'exécute bien plus rapidement que ce qui est normal PHP le permet. La clé ici est le typage statique. Sur un CPU moderne, un langage dynamique mange pénalité de mauvaise prédiction de branche gauche et droite. Le fait que PHP sont des tables de hachage impose également un coût élevé: beaucoup de mauvaises prévisions de branche, une utilisation inefficace du cache, une mauvaise prélecture de la mémoire et aucune optimisation SIMD. et les erreurs de cache en particulier sont le talon d'Achille pour les processeurs d'aujourd'hui. Mon petit VM contourne ce problème en utilisant des types statiques et un tableau C au lieu d'une table de hachage. Le résultat finit par fonctionner environ dix fois plus vite. Cela utilise l'interprétation du bytecode. L'extension peut éventuellement compiler une fonction via gcc. Dans ce cas, vous obtenez deux à cinq fois plus de vitesse.

Voici le lien pour toute personne intéressée:

https://github.com/chung-leong/qb/wiki

Encore une fois, l'extension n'est pas un accélérateur général PHP. Vous devez écrire du code spécifique pour cela.

3
cleong

Vous n'avez pas besoin de minimiser PHP. Afin d'obtenir de meilleures performances, installez un cache Opcode; mais la solution idéale serait de mettre à jour votre PHP vers la version 5.5 ou supérieure car les versions plus récentes ont un cache d'opcode par défaut appelé Zend Optimiser qui fonctionne mieux que les autres http://massivescale.blogspot.com/2013/06/php-55-zend-optimiser-opcache-vs-xcache.html .

1
firewall

Il y a PHP compilateurs ... voir cette question précédente pour une liste; mais (sauf si vous êtes de la taille de Facebook ou que vous ciblez votre application pour exécuter le client- côté) ils sont généralement beaucoup plus de problèmes qu'ils ne valent

La mise en cache d'opcode simple vous donnera plus d'avantages pour l'effort impliqué. Ou profilez votre code pour identifier les goulots d'étranglement, puis optimisez-le.

1
Mark Baker

Oui, il y a un point (non technique).

Votre hébergeur peut espionner votre code sur son serveur. Si vous la minimisez et l'uglifiez, il est plus difficile pour les espions de voler vos idées.

Une des raisons de minimiser et d'uglifier le php peut être la protection contre les espions. Je pense que le code uglyfing devrait une étape dans un déploiement automatique.

0
Dieter Porth