Explication officielleyield
yield生成器
parue après php5.5
, le document officiel explique ceci : yield
fournit un moyen plus simple d'implémenter des objets d'itération simples. Par rapport à la définition d'une classe pour implémenter l'interface Iterator
, la surcharge de performances et la complexité sont considérablement réduites.
Le cœur d'un générateur est un mot-clé yield
. Une fonction génératrice ressemble à une fonction ordinaire. La différence est la suivante : une fonction ordinaire renvoie une valeur, tandis qu'un générateur peut yield
générer plusieurs valeurs. exige. Lorsque la fonction génératrice est appelée, elle renvoie un objet qui peut être itéré.
yield
est similaire à return
, mais la différence est que return
renverra une valeur et terminera l'exécution du code, tandis que yield
renverra une valeur au code qui boucle et appelle ce générateur et suspend simplement l'exécution de la fonction générateur.
Au fait, j'aimerais vous présenter la version PHP de la requête non tamponnée
qui consiste à lire les données ligne par ligne dans la mémoire d'exécution de PHP. Il ne s'agit pas d'une lecture unique dans la mémoire d'exécution de PHP. Comme nous le savons tous, PHP possède de nombreuses fonctions intégrées qui peuvent nous aider à traiter les données. Parce que les données sont en mémoire, elles peuvent être exploitées. , mais la mémoire en cours d'exécution de PHP a une limite et la valeur par défaut est de 128 Mo.
Remarque : étant donné que les requêtes sans tampon mettent beaucoup de temps à se connecter à la base de données, cela peut entraîner des requêtes lentes, des verrous de table, etc., qui consomment plus de ressources MySQL
par rapport aux requêtes non tamponnées La requête est une requête tamponnée :
Si vous utilisez une requête en cache, la mémoire PHP explosera directement et la mémoire sera insuffisante. D'accord, le but principal ici est de mettre en évidence le rendement
performance du rendement
Le générateur aura un très grand impact sur les performances de PHP applications
Le code PHP économise beaucoup de mémoire lors de l'exécution
Il est plus approprié pour calculer de grandes quantités de données
opération de rendementUtiliser
Les générateurs vous permettent d'écrire du code dans un bloc foreach pour parcourir un ensemble de données sans créer de tableau en mémoire, ce qui atteindrait votre limite de mémoire ou prendrait un temps de traitement considérable. Au lieu de cela, vous pouvez écrire une fonction génératrice, tout comme une fonction personnalisée normale, et au lieu qu'une fonction normale ne renvoie qu'une seule fois, le générateur peut produire autant de fois que nécessaire pour générer les valeurs qui doivent être itérées.
Explication avec des exemples
Je viens de construire un tableau ici pour vous démontrer, généralement vous êtes Il en va de même pour l'exploitation des données de sortie de la base de données. En convertissant en array
//仓库库存扣除测试 public function cangku_stock() { //set_time_limit(0); //表示永久运行,这里我是测试array的时候用到的 $order_info = $this->read_temp_api_order_info(10); //这里我就测试了10条数据,效果是看不出来的 foreach($order_info as $temp_api_order_info){ dd($temp_api_order_info); //打印出来看看数据 //处理数据 $api_ware_id = $this->o->getCangkuApiUrl() .'ware/program/addOutWare'; $out_wares = api_request($api_ware_id, $temp_api_order_info); $temp_out_wares = json_decode($out_wares, true); if ($temp_out_wares['code'] != 1) { $msg = (isset($temp_out_wares['msg']) && $temp_out_wares['msg']) ? $temp_out_wares['msg'] : var_export($out_wares, true); throw new Exception($msg); } } //dd("批量更新成功".date('Y-m-d H:i:s'));
, vous pouvez voir que nous appelons $order_info = $this->read_temp_api_order_info(10); qui renvoie un objet Generator. Cet objet peut être itéré en utilisant foreach. Pour chaque itération, PHP demandera. pour une instance de générateur Calculez et fournissez la valeur suivante sur laquelle itérer.
L'élégance des générateurs est que chaque fois qu'une valeur est produite, l'état interne du générateur se mettra en pause ; lorsque la valeur suivante est demandée au générateur, l'état interne sera restauré. L'état interne du générateur bascule entre le blocage et la reprise jusqu'à ce que la fin de la définition de la fonction soit atteinte ou qu'une instruction return vide soit rencontrée.
L'effet est le suivant :
Testez une grande quantité de données ici et modifiez-les directement $this->read_temp_api_order_info(10);就
D'accord, si vous calculez le nombre de tables de données, vous devez alors changer cette méthode. Essayez de le changer vous-même.
Ici, je vais principalement vous expliquer comment utiliser le rendement Si vous voulez voir combien de temps il faut pour insérer. la table de données, vous pouvez ajouter un champ d'heure d'insertion à la table de données, puis examiner la comparaison entre la première insertion de données et la dernière insertion de données.
Pour plus de connaissances sur php, veuillez visiter le tutoriel php !
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!