Y a-t-il un point à minimiser PHP?


101

Je sais que vous pouvez minifier 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 la suivante: les clients verraient-ils une amélioration de la vitesse visible dans les chargements de pages et autres si je réduisais mon PHP?

En outre, existe-t-il un moyen de compiler PHP ou quelque chose de similaire?


Un point évident est l'obfuscation, pour rendre votre code moins portable, ce qui peut être un objectif valable.
John

Réponses:


161

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

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

Facebook a introduit un compilateur nommé HipHop qui transforme la source PHP en code C ++. Rasmus Lerdorf, l'un des grands gars de PHP a fait une présentation pour Digg plus tôt cette année qui couvre les améliorations de performance 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 fournira une amélioration majeure des performances au grand public.

Juste pour vous assurer que c'est indiqué expressément, veuillez lire cette présentation dans son intégralité. 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.


2
Notez que tout le bytecode / vm ne vous achète rien sans un cache de bytecode externe (!). Je ne comprends pas pourquoi PHP continue de jeter le bytecode par défaut ...

J'imagine que c'est un problème d'hébergement partagé. APC est inclus dans PHP par défaut à partir de l'ancien coffre basé sur la version 6.0. Je ne sais pas si nous le verrons par défaut dans la version 5.4 ou quel que soit le nom du nouveau tronc ...
Charles

Merci beaucoup pour l'info. Malheureusement, je n'ai pas de contrôle profond sur mon serveur (il est loué). Est-il probable que les hébergeurs Web utilisent APC?
Bojangles

3
La plupart des fournisseurs d'hébergement mutualisé n'utilisent pas APC. Vous devez rechercher un serveur privé virtuel afin de pouvoir contrôler la configuration. Les VPS sont souvent plus chers que l'hébergement partagé normal, mais beaucoup moins chers qu'un vrai serveur dédié. Les fournisseurs VPS populaires incluent Slicehost et Linode. N'oubliez pas que vous devriez avoir un étalonnage et de profilage votre code premier !
Charles

15

Oubliez l'idée de minimiser PHP au profit de l'utilisation d'un cache opcode, comme PHP Accelerator, ou APC.

Ou quelque chose d'autre comme memcached


18
J'ai dit «autre chose».
Stephen

3
il n'est pas clair que vous vouliez dire autre chose qu'un cache d'opcode.
Treffynnon

5
memcached est un moyen parfaitement efficace pour améliorer les performances ... après avoir effectué une analyse comparative et un profilage et établi que la mise en cache elle-même sera le meilleur gain de performance possible.
Charles

1
si vous utilisez PHP 5.5, vous n'avez pas besoin d'installer de cache d'opcode car il est maintenant fourni avec lui par défaut.
pare

1
En fait, j'ai recherché cromulent: (. Je suis d'accord avec les autres, utiliser Memcached dans ce contexte est trompeur. La mise en cache des données dans le cadre du processus de compilation n'est pas la même chose que le code opérationnel résultant.
Mike Purcell

3

Avec une certaine 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 -wil 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'enregistre cependant que quelques vérifications de fichiers mtime.


3

C'est moins une réponse qu'une publicité. Je travaille sur une extension PHP qui traduit les opcodes Zend pour s'exécuter sur une VM avec un typage statique. Il n'accélère pas le code PHP arbitraire. Il vous permet d'écrire du code qui s'exécute beaucoup plus rapidement que ce que permet PHP standard. La clé ici est le typage statique. Sur un processeur moderne, un langage dynamique mange des pénalités de mauvaise prédiction de branche à gauche et à droite. Le fait que les tableaux PHP soient des tables de hachage impose également un coût élevé: beaucoup d'erreurs de prédiction dans les branches, une utilisation inefficace du cache, une mauvaise prélecture de la mémoire et aucune optimisation SIMD. Les erreurs de prédiction de branche et les erreurs de cache en particulier sont le talon d'Achille pour les processeurs d'aujourd'hui. Ma petite machine virtuelle évite 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. Ceci 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 PHP général. Vous devez écrire un code spécifique pour cela.


2

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

Votre hébergeur peut espionner votre code sur son serveur. Si vous le minifiez et le méprisez, il est plus difficile pour les espions de voler vos idées.

La protection contre les espions est peut-être une des raisons de minimiser et d'ouglifier php. Je pense que le code laid devrait être une étape dans un déploiement automatique.


1

Il existe des compilateurs PHP ... 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 qu'elle s'exécute côté client), ils posent généralement beaucoup plus de problèmes que ce qu'ils valent

La mise en cache simple de l'opcode vous donnera plus d'avantages pour l'effort impliqué. Vous pouvez également profiler votre code pour identifier les goulots d'étranglement, puis l'optimiser.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.