Selon le "TIOBEProgramming Language Ranking" (bien que la liste a des limites en matière de méthodes statistiques, mais cela reste une bonne référence). En 2010, PHP se classait au troisième rang des langages de programmation mondiaux. On constate que le langage PHP est le langage le plus puissant dans le domaine Web à l’ère Internet PC.
Une blague circulait parmi les programmeurs PHP : Si tout le monde commence à faire du bruit, je dînerai avec vous.
Programmeur PHP : PHP est le meilleur langage au monde !Une marmite de forum, des querelles en tout genre... Une femme : prends-toi, c'est parti !
Programmeur PHP : Pas aujourd'hui, je dois les convaincre que PHP doit être le meilleur langage.
D'accord, passons aux choses sérieuses. Le langage en lui-même n'est ni bon ni mauvais, il résout simplement différents problèmes dans les scénarios dans lesquels il est utilisé. L’ère Internet évolue très vite avec l’arrivée de l’Internet mobile, en peu de temps. En plus de quatre ans, le développement de la technologie mobile a balayé le monde. Dans le même temps, divers langages émergent, et PHP, autrefois glorieux, est tombé à la sixième place de la liste originale des langages de programmation (liste de décembre 2014). un). En conséquence, des voix dénigrant PHP ont émergé les unes après les autres.
Cependant, frère Niao (Hui Xinchen, l'un des développeurs du langage PHP) a partagé une donnée sur Qcon en 2014. Parmi les 1 million de sites Web les plus performants au monde, 81,3 % font Le langage de script de serveur Web utilisé est PHP, qui représentait 78,3 % sur la même période de 2013. En d’autres termes, PHP n’a pas diminué en termes de services Web, mais a beaucoup augmenté dans la vague Internet mobile. L’application d’autres technologies linguistiques est ainsi diluée.
Récemment, la comparaison des performances entre PHP7 et HHVM est devenue un sujet brûlant et controversé. Tout le monde discute et prête attention à l'avenir de l'amélioration des performances PHP.
L'origine de HHVM (HipHop Virtual Machine)
. Selon la rumeur, les performances d'exécution de la version actuelle du code PHP natif pourraient être améliorées de 5 à 10 fois. HHVM provient de Facebook. La plupart des premiers codes de Facebook ont été développés en utilisant PHP. Cependant, avec le développement rapide des affaires, PHP a été mis en œuvre. L’efficacité opérationnelle est devenue un problème de plus en plus évident. Afin d'optimiser l'efficacité de l'exécution, Facebook a commencé à utiliser HipHop en 2008, un moteur d'exécution PHP initialement conçu pour cela. Convertissez une grande quantité de code PHP Facebook en C++ pour améliorer les performances et économiser les ressources. Les performances du code PHP utilisant HipHop ont été améliorées plusieurs fois. Plus tard, Facebook a ouvert la plateforme HipHop et l'a progressivement développée pour devenir l'actuelle HHVM.
1. Pourquoi PHP est-il lent ?
PHP est plus lent que les langages de niveau C/C++. En fait, le langage PHP n'a pas été conçu à l'origine pour résoudre des scénarios d'application gourmands en calcul. On peut grossièrement comprendre que PHP sacrifie l'efficacité d'exécution afin d'améliorer l'efficacité du développement. Nous savons qu'une fonctionnalité importante de PHP est la fonctionnalité de type faible. En d'autres termes, je peux définir une variable à volonté, puis l'attribuer à n'importe laquelle. valeur à volonté. En prenant comme exemple un nombre entier entier, en langage C : Cependant, si PHP définit la même variable, la structure de stockage correspondante réelle est : Dans En fait, pour PHP, quel que soit le type de données stockées, le "pass kill" mentionné ci-dessus est utilisé. Implémentation de la structure. Afin d'être compatible avec la variable de type "intrusion" des programmeurs PHP, PHP fait
C'est convivial pour les développeurs, mais cruel pour le moteur d'exécution. La consommation de mémoire d'une seule variable n'est peut-être pas encore évidente. Une fois le tableau Qu'il s'agisse de l'opération de connexion de chaîne ou de la simple modification du tableau, etc., ils sont presque tous "un mot d'un programmeur PHP, et le moteur Zend va se casser les jambes" Rhythm. Par conséquent, pour la même opération, PHP consomme plus de ressources système telles que le CPU et la mémoire que C. De plus, il existe un recyclage automatique de la mémoire, un jugement de type variable, etc., qui augmenteront la consommation des ressources système.
Le tri natif prend 3,44 ms, tandis que notre propre implémentation de la fonction PHP
Habituellement, le classement de l'efficacité d'exécution de PHP est :
Les plus rapides sont les structures du langage PHP (isset, echo, etc.), qui font partie du langage PHP (ce ne sont pas du tout des fonctions).
Ensuite, les plus rapides sont les fonctions natives et étendues de PHP. L'extension PHP, basée sur l'API Zend, implémente des fonctions en C, et son efficacité d'exécution est du même ordre de grandeur que C++/Java. Ce qui est vraiment lent, c'est le code et les fonctions que nous écrivons nous-mêmes via PHP. Par exemple, si nous utilisons un framework relativement lourd implémenté en PHP pur, parce que le framework lui-même comporte de nombreux modules, il réduira évidemment l'efficacité d'exécution au niveau du langage et occupera plus de mémoire. (Le framework Yaf domestique est implémenté de manière étendue, donc l'efficacité d'exécution est beaucoup plus rapide que le framework écrit en PHP pur)
Dans des circonstances normales, nous ne recommandons pas d'utiliser PHP pour implémenter des fonctions de calcul logique complexes, en particulier dans les scénarios où le trafic du système Web est relativement important. Par conséquent, les programmeurs PHP devraient
Avoir une compréhension relativement large des différentes fonctions natives et des diverses extensions de PHP. Dans des scénarios d'implémentation de fonctions spécifiques, recherchez des solutions plus natives ( interface native ou extensions) au lieu d'en écrire une vous-même.
Code PHP pour implémenter ce type de fonctionnalité. Si vous disposez de suffisamment de capacités de développement d'extensions PHP, la réécriture de ce type de fonction métier en tant qu'extension PHP améliorera également considérablement l'efficacité de l'exécution du code. C'est une très bonne méthode et elle est également largement utilisée dans l'optimisation PHP. Cependant, les lacunes du développement commercial PHP auto-écrit sont également évidentes : Le développement d'une extension prend beaucoup de temps et les modifications sont compliquées lorsque les exigences changent, et il est difficile à écrire. Cela peut affecter la stabilité des services Web. (Par exemple, dans le mode travailleur d'Apache, s'il se bloque dans un scénario multithread, cela affectera d'autres sous-threads normaux dans le même processus. S'il s'agit d'un mode Web multithread, l'écriture d'extensions doit également prendre en charge le thread sécurité ) Lorsque la version PHP est mise à niveau, l'extension devra peut-être effectuer un travail de compatibilité supplémentaire. Les coûts de maintenance et de reprise après changement de personnel sont également relativement élevés. En fait, parmi les sociétés Internet de première ligne, la solution la plus courante n'est pas d'ajouter des extensions PHP, mais d'utiliser C/ C++ Écrivez indépendamment un serveur de service, puis PHP communique avec le serveur de service via un socket pour terminer le traitement métier, sans coupler PHP lui-même avec l'entreprise. Cependant, la plupart des goulots d'étranglement des performances des services Web résident dans le temps de transmission réseau et d'autres serveurs de services (tels que MySQL, etc.), et la consommation de temps d'exécution de PHP La proportion globale de consommation de temps est très faible, donc d'un point de vue commercial, l'impact peut ne pas être évident. 2. La façon dont HHVM améliore les performances d'exécution de PHP Remplace le moteur Zend pour générer et exécuter le bytecode intermédiaire de PHP (HHVM génère son propre format de bytecode intermédiaire
code), exécuté via JIT (juste
, la compilation juste à temps est une technologie d'optimisation logicielle, ce qui signifie que le bytecode est compilé en code machine au moment de l'exécution) et converti en code machine pour son exécution. La méthode par défaut du moteur Zend consiste à le compiler d'abord en opcode, puis à le compiler un par un.
Exécution, généralement chaque instruction correspond à une fonction de niveau langage C. Si nous générons un grand nombre d’opcodes répétés (codes et fonctions écrits en PHP pur), Zend exécutera ces codes C un par un plusieurs fois.
code. Ce que fait JIT, c'est aller plus loin et compiler un grand nombre de bytecodes exécutés à plusieurs reprises dans le code machine au moment de l'exécution pour améliorer l'efficacité de l'exécution. Habituellement, la condition qui déclenche JIT est que le code ou la fonction est
appels répétés.
Code PHP ordinaire, car le type de la variable ne peut pas être corrigé, un code logique supplémentaire pour déterminer le type doit être ajouté, un tel code PHP n'est pas propice à l'exécution et à l'optimisation du processeur
de. Par conséquent, HHVM a généralement besoin d'utiliser du code PHP avec la méthode d'écriture Hack (code technique supplémentaire ajouté pour être compatible avec certaines fonctionnalités) pour "coopérer", afin de fixer le type de variable et de faciliter la virtualisation.
Machine compilée et exécutée. PHP cherche à accueillir tous les types sous une seule forme, tandis que Hack peut marquer tout ce qui est hébergé avec un certain type. Exemple de méthode d'écriture Hack de code PHP :
Dans l'exemple ci-dessus, le code PHP est principalement ajouté avec des types de variables. La direction générale de l'écriture Hack est de changer la méthode d'écriture "dynamique" précédente en méthode d'écriture " " pour coopérer avec HHVM.
, l'écart entre HHVM et PHP7 n'est pas si grand dans les résultats du scénario de test utilisant la page d'accueil du blog open source WordPress, leur actuelle. l'écart n'est pas évident.
Le déploiement du service est compliqué et entraîne certains coûts de maintenance. Pour un projet open source relativement nouveau, il faut encore un certain temps pour mûrir. Les problèmes de performances pour lesquels PHP a longtemps été critiqué seront grandement améliorés dans cette version. Il n'y a pas de PHP6 dans la version. On dit que cette version a un projet, et plus tard la plupart des fonctions ont été implémentées dans la version 5.x. Afin d'éviter toute confusion, la prochaine version majeure sera directement PHP7. (Il y a quelques années, j'ai aussi vu des livres sur PHP6.) 1. Introduction à PHP7 Bien que officiel La version de PHP7 pourrait ne pas être publiée avant octobre 2015, une version de test devrait être disponible en juin de l'année prochaine, suivie de 3 à 4 mois d'assurance qualité. Le plan de projet de la communauté PHP est le suivant : Parce que le projet est encore en développement depuis le 🎜>tableau PHPNG (PHP nouvelle génération, nouvelle génération PHP), diverses optimisations de performances pour le moteur d'exécution Zend lui-même, y compris JIT, peuvent être implémentées dans Zend
Dans le composant Opcache. AST (Abstract Syntax Tree, arbre de syntaxe abstraite) est conçu pour introduire un middleware dans le processus de compilation PHP pour remplacer la façon de cracher l'opcode directement à partir du interprète. Le découplage de l'interpréteur et du compilateur peut réduire beaucoup de code Hack et, en même temps, rendre l'implémentation plus facile à comprendre et à maintenir. la syntaxe de variable uniforme introduit une syntaxe de variable cohérente et complète en interne, permettant à l'analyseur PHP de prendre en charge plus pleinement divers types de variables. L'utilisation de certaines variables doit être ajustée, comme la variable $$a, etc. Prend en charge la sémantique entière (sémantique entière), telle que NaN, Infinity, <<, >>, corrige la cohérence de list(), etc. attendez. Parmi les fonctionnalités ci-dessus, la plus attendue est l'optimisation des performances de PHPng. La communauté PHP a publié des données de tests de vitesse de performances. Du point de vue des données, PHPng
La performance d'exécution a été presque doublée par rapport au début du projet. Ce résultat est déjà très bon. De plus, le plus important est qu'il existe encore de nombreux plans d'optimisation pour PHP7 qui ne sont pas encore terminés. Attendez que tout soit terminé,
Je crois que nous pouvons voir un PHP7 plus performant. Ces données de test de vitesse proviennent de la communauté PHP (wiki.php.net/phpng) et interceptent une partie des données :
La vitesse du test complet est augmentée de 35 %. Dans les scénarios d'application réels, il y a une augmentation de la vitesse de 20 à 70 % (la page d'accueil WordPress a une amélioration de 60 %) Moins de consommation de mémoire Prend en charge les SAPI les plus couramment utilisés Prend en charge la plupart des extensions PHP liées à l'allocation de ressources (69 terminées, 6 à migrer) Fournit une vitesse d'exécution comparable à HHVM3.3.0
2. La controverse sur les types faibles de PHP
PHP possède de nombreuses fonctionnalités controversées, mais avec la sortie et l'amélioration de la version linguistique, les critiques sur les fonctions et les fonctionnalités ont commencé à diminuer. Cependant, la fonctionnalité "type faible" de PHP a évidemment été plus controversée. Du fait que HHVM a directement "supprimé" la fonctionnalité "type faible" via Hack, on peut voir que HHVM n'aime pas la fonctionnalité "type faible". Cependant, dans bon nombre de nos
Aux yeux des programmeurs PHP, c’est l’un des avantages importants de PHP. Les variables en PHP sont conçues pour être décontractées et élégantes, englobant tout. Cela ne simplifie-t-il pas le langage ?
En fait, certains pensent qu'il s'agit d'un problème sérieux, et la critique de la « frappe faible » est à peu près la suivante :
Dans un langage "strict", le type d'une variable est généralement prédéfini Du début à la fin, le type de la variable est fixe. , et le champ d'utilisation est également fixé. Quant à la variable de PHP , nous ne pouvons généralement voir que son nom, et la plupart des types ne peuvent pas être prédéfinis et peuvent être modifiés à volonté. (L'allocation de mémoire n'est pas facile à gérer) Afin d'être compatible avec les fonctionnalités de type faibles, PHP doit implémenter une grande quantité de code compatible, y compris le type le jugement, la conversion de type , les méthodes de stockage, etc., augmentent la complexité interne du langage. (Faible efficacité d'exécution) Le type de la variable est incontrôlable Il y a beaucoup de "conversions de type implicites" pendant le processus d'exécution, ce qui peut facilement conduire. à un résultat imprévisible. (Il faut souligner ici que la conversion de types PHP est un point qui doit être maîtrisé. La conversion de différents types entre eux peut poser de nombreux problèmes, en particulier pour les étudiants qui débutent en PHP)
Ils pensent que ceux-ci ne sont pas conformes à la simplicité du « ce que vous voyez est ce que vous obtenez », et que les langues avec une grammaire stricte sont plus efficaces et plus facile à « comprendre ».
Des langages tels que Javascript ont été également critiqués, car leurs performances sur cette question sont les mêmes. Cependant, pour qu'une langue puisse éventuellement être utilisée à grande échelle, elle doit
Il y a des raisons à cela. PHP est devenu le langage de script de choix pour le développement de services Web, et Javascript a directement dominé le domaine du front-end Web. Ce n'est pas un hasard si nous en sommes arrivés à ce point.
Les pieds ont voté pour eux. Le langage de programmation est un pont entre les humains et les machines, et l’objectif ultime est d’atteindre le grand objectif de « tout le monde peut programmer ».
Tout au long de l'histoire du développement des langages, depuis le code machine des 0 et des 1, jusqu'au langage assembleur, puis au langage C, puis au langage de script dynamique PHP. L'efficacité d'exécution diminue de façon exponentielle, mais le seuil d'apprentissage diminue également de façon exponentielle. Le langage PHP protège non seulement la complexité de la gestion de la mémoire et des pointeurs du C, mais protège également davantage la complexité des types de variables. Cela améliore l’efficacité du développement du projet et abaisse le seuil d’apprentissage, mais sacrifie en même temps une certaine quantité de performances d’exécution. Ensuite, le Hack de HHVM nous donne une sensation de « retour au primitif », réintroduisant la complexité des variables. Bien entendu, différents langages résolvent des problèmes dans différents scénarios et ne peuvent pas être généralisés.
. Les deux sont d’excellents projets open source et tous deux s’améliorent constamment
Avancer et se développer. Pour l’instant, comme il reste encore beaucoup de temps avant la sortie de la version officielle de PHP7, le choix actuel de solution d’optimisation des performances est bien entendu HHVM. Mais personnellement, je préfère
Je suis optimiste quant à PHP7 car il est plus rétrocompatible avec le code PHP. S’il n’y a pas beaucoup de différence de performances entre les deux, je choisirai le plus simple. int num = 200;//通常是4字节
La mémoire avec beaucoup plus de variables est définie en PHP comme suit : $a = 200;//这变量将实际占用对比C变量很多倍的存储空间。
le tri prend 68,79
MS. Nous avons constaté qu’il existe un énorme écart en termes d’efficacité d’exécution entre les deux. Ma méthode de test consiste à calculer l'intervalle de temps avant et après l'exécution de la fonction, plutôt que le temps du début à la fin de l'ensemble du script PHP. Script PHP pour démarrer et arrêter également
Le processus lui-même comporte une série de travaux d'initialisation et de nettoyage, qui prennent également beaucoup de temps.
HHVM a attiré beaucoup d'attention en raison de ses hautes performances, et certaines sociétés Internet de premier plan ont également commencé à emboîter le pas. À en juger par les résultats des tests de performances d'exécution du langage pur, HHVM est bien en avance sur la version PHP7 en cours de développement.
ne prend pas entièrement en charge le code natif PHP, et les extensions PHP doivent également être correctement compatibles.
HHVM est une nouvelle machine virtuelle et peut provoquer des fuites de mémoire lors d'une exécution prolongée. (On dit que lorsque les sociétés Internet de premier plan appliquent cette technologie, elles résolvent les fuites de mémoire en appliquant elles-mêmes des correctifs)
Innovation en termes de performances de PHP7
🎜>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!