php json à l'efficacité du tableau

WBOY
Libérer: 2023-05-19 14:02:37
original
504 Les gens l'ont consulté

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.

  1. Opération de base de conversion de json en tableau

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 ]]] )
Copier après la connexion

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);
Copier après la connexion

Le résultat de sortie est :

Array
(
    [name] => 张三
    [age] => 18
)
Copier après la connexion

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.

  1. Gout d'étranglement des performances de json vers un tableau

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) . "
";
Copier après la connexion

Le résultat du test est :

10000
0.785
Copier après la connexion

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.

  1. Schéma d'optimisation pour la conversion de json en tableau

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;
}
Copier après la connexion

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);
Copier après la connexion

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.

  1. Summary

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal