Maison > Article > développement back-end > php json à l'efficacité du tableau
Ces dernières années, avec le développement rapide de l'Internet mobile et le développement fulgurant du cloud computing, de l'Internet des objets, de l'intelligence artificielle et d'autres domaines, l'efficacité du traitement des données est devenue l'une des préoccupations des grandes entreprises. Dans le développement Web, le traitement des données json est devenu un maillon indispensable. PHP, en tant que force principale du développement Web, est également confronté au problème du traitement efficace des données json. Dans ce contexte, cet article explorera l'efficacité de la conversion de json en tableau en PHP et comment l'optimiser.
En PHP, l'opération de conversion de données json en tableau est très simple, utilisez simplement json_decode( ) fonction. La fonction est définie comme suit :
mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )
Parmi eux, le paramètre $json indique la chaîne json à décoder, le paramètre $assoc indique s'il faut convertir l'objet json en tableau associatif, et le $ Le paramètre de profondeur indique le nombre maximum de couches de décodage prises en charge (la valeur par défaut est 512), le paramètre $options indique les options de comportement lors du décodage.
Ce qui suit est un exemple simple :
$json_str = '{"name":"张三","age":18}'; $arr = json_decode($json_str, true); print_r($arr);
Le résultat de sortie est :
Array ( [name] => 张三 [age] => 18 )
On peut voir que la conversion d'une chaîne json en un tableau est très simple, et l'efficacité du traitement est relativement élevée, et il prend en charge la conversion de tableaux associatifs et de tableaux ordinaires.
Bien que json vers un tableau soit très simple, il y aura des goulots d'étranglement de performances lors du traitement d'une grande quantité de json données . Tout d'abord, le décodage des chaînes json nécessite certaines ressources système, telles que la mémoire, le CPU, etc. Deuxièmement, lors de la conversion d'une chaîne json en tableau, elle doit être analysée et convertie couche par couche en fonction de la structure de la chaîne json. Ce processus nécessite également beaucoup de temps et de ressources.
Pour illustrer ce problème, voici un exemple de test de performances. Les données json testées contiennent 10 000 objets, chaque objet a 10 attributs et tous les attributs sont des types de chaîne. 10 Mo.
<?php $start_time = microtime(true); $json = file_get_contents('test.json'); $arr = json_decode($json, true); echo count($arr) . " "; echo (microtime(true) - $start_time) . " ";
Le résultat du test est :
10000 0.785
On peut voir qu'il faut 0,785 seconde pour décoder et convertir 10 Mo de données json. Ce temps peut être nécessaire dans certaines conditions de concurrence élevée. et les exigences en temps réel. Cela deviendra un goulot d'étranglement dans les applications supérieures. Par conséquent, comment améliorer l’efficacité de la conversion de json en tableau est devenu une question très importante.
Une variété de solutions d'optimisation peuvent être adoptées pour résoudre le goulot d'étranglement des performances lié à la conversion de json en tableau.
3.1. Compresser les données json
Tout d'abord, vous pouvez utiliser des données json compressées pour réduire la taille de la chaîne json, raccourcissant ainsi le temps de décodage et de conversion. Les méthodes de compression courantes incluent gzip et LZ4. Par exemple, l'utilisation de gzip pour compresser les données json dans l'exemple ci-dessus peut réduire la taille des données à environ 1,56 Mo, raccourcissant ainsi le temps de décodage et de conversion.
3.2. Utilisez la méthode d'analyse en streaming
Deuxièmement, vous pouvez utiliser la méthode d'analyse en streaming pour analyser progressivement les données JSON afin d'éviter de charger la chaîne JSON entière en mémoire en même temps. Vous pouvez utiliser la fonction json_stream_decode() en php pour implémenter l'analyse en streaming. Par exemple :
<?php $handle = fopen('test.json', 'r'); $arr = []; $parser = json_parser(); while (($line = fgets($handle)) !== false) { $result = $parser->write($line); if ($result !== null) { array_push($arr, $result); } } fclose($handle); echo count($arr) . " "; function json_parser() { $parser = new JsonStreamingParser_Parser(new class() implements JsonStreamingParser_Listener { private $current_obj; private $stack; public function start_document() { $this->stack = []; } public function start_object() { $this->current_obj = []; } public function end_object() { $obj = array_pop($this->stack); if (!empty($this->stack)) { $current_key = end($this->stack); $current_key[] = $obj; } else { array_push($this->current_obj, $obj); } } public function start_array() { $this->stack[] = []; } public function end_array() { $arr = array_pop($this->stack); if (!empty($this->stack)) { $current_key = end($this->stack); $current_key[] = $arr; } else { array_push($this->current_obj, $arr); } } public function key($key) { array_push($this->stack, [$key]); } public function value($value) { $current_key = end($this->stack); $current_key[] = $value; } public function whitespace($whitespace) { } }); return $parser; }
Dans cet exemple, la bibliothèque tierce JsonStreamingParser est utilisée pour implémenter l'analyse en streaming. Le principe de base est de désassembler les données json en plusieurs petits morceaux, d'analyser chaque petit morceau et de générer les éléments de tableau correspondants. De cette façon, vous pouvez éviter de charger simultanément la totalité de la chaîne json en mémoire, améliorant ainsi considérablement l'efficacité.
3.3. Utiliser le protocole binaire
Enfin, vous pouvez utiliser le protocole binaire pour remplacer la chaîne json et la convertir en données binaires pour la transmission et le traitement. Étant donné que les données binaires sont généralement plus compactes que les données littérales, elles peuvent être analysées plus rapidement. En php, vous pouvez utiliser l'extension MessagePack pour implémenter le traitement du protocole binaire. Par exemple :
$msgpack = new MessagePack(); $packed = $msgpack->pack($arr); $unpacked = $msgpack->unpack($packed);
Dans cet exemple, le tableau est converti au format binaire et les méthodes pack() et unpack() de la classe MessagePack sont utilisées pour la conversion. On peut constater que l’utilisation de protocoles binaires peut grandement améliorer l’efficacité du décodage et de la conversion.
Dans le développement actuel, json est un format de données très couramment utilisé et est également l'un des formats de données standard de l'API Web. Par conséquent, il est très important d’optimiser l’efficacité de la conversion de json en tableau en php. Dans cet article, trois solutions d'optimisation courantes sont présentées, notamment l'utilisation d'algorithmes de compression, l'utilisation de l'analyse de streaming et l'utilisation de protocoles binaires. Chaque solution d'optimisation présente ses propres avantages et scénarios applicables, et les développeurs peuvent choisir la solution appropriée en fonction des besoins réels.
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!