Maison  >  Article  >  développement back-end  >  Quelles optimisations ont été faites dans php7 ?

Quelles optimisations ont été faites dans php7 ?

(*-*)浩
(*-*)浩original
2019-10-10 14:04:453105parcourir

Quelles optimisations ont été faites dans php7 ?

1 zval utilise la mémoire de pile

Dans le moteur et les extensions Zend, il est souvent nécessaire de créer une variable PHP, et la couche inférieure est un pointeur zval. Les versions précédentes utilisaient MAKE_STD_ZVAL pour allouer dynamiquement une mémoire zval à partir du tas. (Apprentissage recommandé : Tutoriel vidéo PHP)

Et PHP7 peut utiliser directement la mémoire de la pile. Les variables créées en code PHP ont également été optimisées, PHP7 pré-alloue zval directement sur la mémoire de la pile. Cela permet d'économiser de nombreuses opérations d'allocation de mémoire et de gestion de la mémoire.

Deuxièmement, zend_string stocke la valeur de hachage, la requête de tableau n'a plus besoin de calculer le hachage à plusieurs reprises

PHP7 a créé un nouveau type de chaîne appelé zend_string, en plus du pointeur char * et length De plus, un champ de hachage est ajouté pour enregistrer la valeur de hachage de la chaîne.

Array est la structure de données de base en PHP. Il existe souvent un grand nombre d'opérations $array[$key] dans les programmes PHP. Bien que la complexité temporelle de la recherche dans la table de hachage soit O(1), $key doit le faire. être converti en hachage. Les valeurs doivent être calculées.

Pas seulement les opérations de tableau, en fait, la couche inférieure de PHP pour les attributs de classe, les méthodes de classe et les fonctions doit d'abord trouver le pointeur correspondant via la table de hachage lors de l'accès, puis effectuer l'opération correspondante. Avant PHP7, le moteur Zend utilisait beaucoup de temps CPU pour calculer les valeurs de hachage.

En fait, une fois le programme PHP exécuté, la valeur de $key reste inchangée dans la plupart des cas. PHP7 enregistre simplement la valeur de hachage et l'utilise directement la prochaine fois, économisant ainsi de nombreuses opérations de calcul de hachage. Les performances de la table de hachage PHP sont cohérentes avec celles des tableaux C.

Les données sont stockées directement dans trois buckets de table de hachage

Chaque élément de la table de hachage de PHP5 est un bucket*, tandis que PHP7 stocke directement le bucket, réduisant ainsi le nombre d'applications mémoire et améliorant Taux de réussite du cache et vitesse d’accès à la mémoire.

Quatre zend_parse_parameters sont modifiés en implémentation de macro

Lors de la saisie de paramètres entre la fonction d'extension C de PHP et les variables en PHP, vous devez utiliser la fonction zend_parse_parameters() Cette fonction. est basé sur un Le paramètre string trouve le pointeur zval correspondant à PHP puis l'attribue. Cette fonction a en réalité un certain coût en termes de performances.

PHP7 utilise directement des macros pour remplacer la fonction zend_parse_parameters. Dans les extensions C, il n'est plus nécessaire d'utiliser zend_parse_parameters pour rechercher les paramètres un par un. L'affectation des paramètres sera automatiquement implémentée après l'expansion des macros. Cela seul améliore les performances de 5%.

5 4 nouveaux OPCODE ajoutés

De nombreux programmes PHP utilisent largement call_user_function, is_int/string/array, strlen et les fonctions définies. PHP5 est fourni sous forme de fonctions d'extension. Ces quatre types de fonctions dans PHP7 sont remplacés par les instructions OPCODE de ZendVM, qui s'exécutent plus rapidement.

Six autres optimisations supplémentaires

En plus des cinq points d'optimisation principaux ci-dessus, PHP7 propose d'autres optimisations de performances plus détaillées.

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