PHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel)

藏色散人
Freigeben: 2023-04-08 10:10:01
nach vorne
5501 Leute haben es durchsucht

PHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel)

Offizielle Erklärungyield

yield生成器 erschien nach php5.5, das offizielle Dokument erklärt dies: yield bietet eine einfachere Möglichkeit, einfache Iterationsobjekte zu implementieren. Im Vergleich zur Definition einer Klasse zur Implementierung der Iterator -Schnittstelle werden der Leistungsaufwand und die Komplexität erheblich reduziert.

Der Kern eines Generators ist ein yield-Schlüsselwort. Eine Generatorfunktion sieht aus wie eine gewöhnliche Funktion. Der Unterschied besteht darin, dass eine gewöhnliche Funktion einen Wert zurückgibt, während ein Generator viele Werte generieren kann erfordert. Wenn die Generatorfunktion aufgerufen wird, gibt sie ein Objekt zurück, über das iteriert werden kann. yield

ähnelt yield, der Unterschied besteht jedoch darin, dass return einen Wert zurückgibt und die Ausführung des Codes beendet, während return einen Wert an den Code zurückgibt, der eine Schleife durchführt ruft diesen Generator auf und pausiert einfach die Ausführung der Generatorfunktion. yield

Übrigens möchte ich Ihnen die PHP-Version der nicht gepufferten Abfrage

vorstellen, was das Lesen der Datenzeile bedeutet Zeile in den PHP-Laufspeicher Es ist kein einmaliges Einlesen in den PHP-Laufspeicher. Wie wir alle wissen, verfügt PHP über viele integrierte Funktionen, die uns bei der Verarbeitung von Daten helfen können betrieben werden, aber der PHP-Laufspeicher ist begrenzt und der Standardwert ist 128 MB.

Hinweis: Da die Verbindung nicht gepufferter Abfragen mit der Datenbank lange dauert, kann es zu langsamen Abfragen, Tabellensperren usw. kommen, die mehr MySQL-Ressourcen verbrauchen

relativ ungepuffert Die Abfrage ist eine gepufferte Abfrage:

Wenn Sie eine zwischengespeicherte Abfrage verwenden, explodiert der PHP-Speicher direkt und es ist nicht genügend Speicher vorhanden. Okay, der Hauptzweck besteht hier darin, den Ertrag hervorzuheben

Ertragsleistung

Der Generator wird einen sehr großen Einfluss auf die Leistung von PHP haben Anwendungen

PHP-Code spart beim Ausführen viel Speicher

Es eignet sich besser zum Berechnen großer Datenmengen

ErtragsbetriebVerwenden

Mit Generatoren können Sie Code in einen foreach-Block schreiben, um einen Datensatz zu durchlaufen, ohne ein Array im Speicher zu erstellen, was Ihre Speichergrenze erreichen oder erhebliche Verarbeitungszeit in Anspruch nehmen würde. Stattdessen können Sie eine Generatorfunktion schreiben, genau wie eine normale benutzerdefinierte Funktion, und statt einer normalen Funktion, die nur einmal zurückgibt, kann der Generator so oft wie nötig nachgeben, um die Werte zu generieren, über die iteriert werden muss.

Erklärung mit Beispielen

PHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel)

Ich habe hier gerade ein Array erstellt, um Ihnen zu zeigen, dass Sie es normalerweise sind Das Gleiche gilt für die Ausgabedaten der Betriebsdatenbank. Beim Konvertieren in ein 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'));
Nach dem Login kopieren

können Sie sehen, dass wir $order_info = $this->read_temp_api_order_info(10); aufrufen. Dieses Objekt kann mit foreach iteriert werden für eine Generatorinstanz. Berechnen Sie den nächsten Wert, über den iteriert werden soll.

Die Eleganz von Generatoren besteht darin, dass der interne Zustand des Generators jedes Mal angehalten wird, wenn der nächste Wert vom Generator angefordert wird, und der interne Zustand wiederhergestellt wird. Der interne Status des Generators wechselt zwischen Anhalten und Fortsetzen, bis das Ende der Funktionsdefinition erreicht ist oder eine leere Return-Anweisung gefunden wird.

Der Effekt ist wie folgt:

PHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel)

Testen Sie hier eine große Datenmenge und ändern Sie sie direkt

Okay, wenn Sie die Anzahl berechnen Datentabellen, dann müssen Sie diese Methode ändern. Versuchen Sie es selbst zu ändern. $this->read_temp_api_order_info(10);就

PHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel)

Hier erkläre ich Ihnen hauptsächlich, wie Sie Yield verwenden, wenn Sie sehen möchten, wie lange das Einfügen dauert In der Datentabelle können Sie der Datentabelle ein Einfügezeitfeld hinzufügen und dann den Vergleich zwischen der ersten Dateneinfügung und der letzten Dateneinfügung anzeigen.

Weitere PHP-Kenntnisse finden Sie im

PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonPHP-Generator Yield verarbeitet große Datenmengen im Geschäft (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!