Maison  >  Article  >  développement back-end  >  Pourquoi php est-il lent ?

Pourquoi php est-il lent ?

(*-*)浩
(*-*)浩original
2019-09-16 15:47:202734parcourir

Pourquoi PHP est-il lent ?

Pourquoi php est-il lent ?

PHP est lent par rapport aux langages de niveau C/C++. En fait, la conception originale du langage PHP, c'est le cas. pas utilisé pour résoudre des scénarios d’application intensifs en calcul. On peut grossièrement comprendre que PHP sacrifie l'efficacité d'exécution afin d'améliorer l'efficacité du développement. (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)

On sait qu'une grosse fonctionnalité de PHP est la fonctionnalité de type faible, c'est-à-dire que je peux définir une variable à volonté, puis attribuez-le à différents types de données à volonté. Prenons comme exemple un nombre entier, en langage C :

int num = 200;//通常是4字节

Cependant, si PHP définit la même variable, la structure de stockage réelle correspondante est :

Cette structure occupera beaucoup plus mémoire que les variables C. Il est défini en PHP comme suit :

$a = 200;//这变量将实际占用对比C变量很多倍的存储空间。

En fait, pour PHP, quel que soit le type de données stockées, ce qui précède " L'implémentation de la structure de "Tong Kill". Afin d'être compatible avec le type de variable "intrusion" des programmeurs PHP, PHP a été 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 les tableaux PHP utilisés, la complexité augmente de façon exponentielle (l'implémentation des tableaux est HashTable).

Ensuite, lorsque le moteur Zend s'exécute, ces codes PHP sont compilés en opcode (le bytecode intermédiaire de PHP, le format est quelque peu similaire à l'assembly), qui est interprété et exécuté ligne par ligne par le moteur Zend.

Qu'il s'agisse de l'opération de connexion de chaînes ou de la simple modification de tableaux, etc., c'est presque le rythme de "un mot d'un programmeur PHP, et le moteur Zend va tomber en panne". 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.

Par exemple, j'ai utilisé la fonction de tri rapide et la fonction de tri native implémentée en PHP pur pour trier 10 000 nombres entiers afin de faire une comparaison fastidieuse. Les résultats sont les suivants :

Le. le tri natif prend 3,44 ms, tandis que notre propre tri de fonction PHP implémenté prend 68,79 ms. Nous avons constaté qu’il existe un énorme écart en termes d’efficacité d’exécution entre les deux.

Ma façon de tester est de 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. Le processus de démarrage et d'arrêt du script PHP lui-même implique une série de travaux d'initialisation et de nettoyage, qui prennent également beaucoup de temps.

Habituellement, le classement de l'efficacité d'exécution de PHP est :

La plus rapide est la structure du langage PHP (isset, echo, etc.), qui fait partie du langage PHP ( ce ne sont fondamentalement pas une fonction).

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 celle d'un framework écrit en PHP pur)

Dans des circonstances normales, nous ne recommandons pas d'utiliser PHP pour implémenter des calculs logiques complexes fonctions. Surtout dans les scénarios où le trafic du système Web est relativement important. Par conséquent, les programmeurs PHP doivent avoir une compréhension relativement large des diverses fonctions natives et des diverses extensions de PHP. Dans des scénarios d'implémentation de fonctions spécifiques, recherchez des solutions plus natives (interfaces ou extensions natives) au lieu d'en écrire une par eux-mêmes. 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 inconvénients du développement commercial PHP auto-écrit sont également évidents :

Le développement d'extensions prend beaucoup de temps et les modifications sont compliquées lorsqu'une mauvaise écriture 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'extension d'écriture doit prendre en charge la sécurité des threads. )

Les extensions peuvent devoir effectuer un travail de compatibilité supplémentaire lors de la mise à niveau de la version PHP.

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 une extension PHP, mais d'écrire un serveur de service indépendamment en C/C++, puis PHP communique avec le serveur de service via socket pour traitement métier complet. Il ne couple pas PHP lui-même avec l'entreprise.

Cependant, la plupart des goulots d'étranglement en termes de performances des services Web résident dans le temps de transmission réseau et d'autres serveurs de services (tels que MySQL, etc.). Le temps d'exécution de PHP représente une très petite proportion de celui-ci. le temps global prend, donc d'un point de vue commercial, l'impact peut ne pas être évident.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn