Visualiser l'utilisation de la mémoire avec et sans utiliser de générateurs peut aider à comprendre les avantages en termes d'efficacité. Vous trouverez ci-dessous une comparaison de l'utilisation de la mémoire dans deux scénarios :
Disons que nous avons une fonction simple qui renvoie un tableau de nombres de 0 à 999 999. Cette fonction charge toutes les données en mémoire en même temps.
<?php function getNumbersArray() { $numbers = []; for ($i = 0; $i < 1000000; $i++) { $numbers[] = $i; } return $numbers; } $numbers = getNumbersArray(); foreach ($numbers as $number) { // Process each number } ?>
Lorsque la fonction getNumbersArray est appelée :
| Memory Usage Without Generators | |------------------------------------------------------| | Start | * | | | ** | | | *** | | | **** | | | ***** | | | ****** | | | ******* | | ... | ******************************************| | End | ******************************************| |------------------------------------------------------|
Maintenant, nous utilisons une fonction génératrice pour générer des nombres un par un.
<?php function numberGenerator() { for ($i = 0; $i < 1000000; $i++) { yield $i; } } foreach (numberGenerator() as $number) { // Process each number } ?>
Lorsque la fonction génératrice numberGenerator est appelée :
| Memory Usage With Generators | |------------------------------------------------------| | Start | * | | | * | | | * | | | * | | | * | | | * | | | * | | ... | * | | End | * | |------------------------------------------------------|
Les générateurs offrent des avantages significatifs en termes d'efficacité de la mémoire, en particulier pour les grands ensembles de données, en produisant un élément à la fois et en maintenant une faible utilisation de la mémoire tout au long de l'exécution du script.
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!