Maison  >  Article  >  développement back-end  >  Une explication des performances entre php imploser/exploser, sérialiser, json et msgpack

Une explication des performances entre php imploser/exploser, sérialiser, json et msgpack

jacklove
jackloveoriginal
2018-06-09 11:07:462029parcourir

php imploser/exploser, sérialiser, json, comparaison des performances de msgpack

Première utilisation imploser, sérialiser, json_encode, msgpack_packCréez quatre fichiers texte pour les tests.

Le code de création est le suivant :

<?php
$arr = array(
    &#39;content1&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content2&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content3&#39; => &#39;一二三四五六七八九十&#39;
);
echo file_put_contents(&#39;implode.txt&#39;, implode(&#39;,&#39;,$arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;serialize.txt&#39;, serialize($arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;json.txt&#39;, json_encode($arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;msgpack.txt&#39;, msgpack_pack($arr), true);
?>


Générer après création

implode .txt 92 octets
serialize.txt 165 octets
json.txt 223 octets
msgpack.txt 121 octets

caractères générés La chaîne size est trié comme suit implode < msgpack_pack < Serialize < >

Par exemple :

sérialiser fait 147 octets

json_encode fait 91 octets

$arr = array(&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;,&#39;七&#39;,&#39;八&#39;,&#39;九&#39;,&#39;十&#39;);

Comparez les performances d'implode, de sérialisation, de json_encode et de msgpack_pack

Résultat : l'utilisation de la mémoire est similaire, temps d'exécution

<?php
$arr = array(
    &#39;content1&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content2&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content3&#39; => &#39;一二三四五六七八九十&#39;
);
$start = microtime(true);
$i = 1000000;
while($i>0){
    // 分别测试运行时间及内存使用情况
    $tmp = implode(&#39;,&#39;,$arr);
    // $tmp = serialize($arr);
    // $tmp = json_encode($arr);
    // $tmp = msgpack_pack($arr);
    $i--;
}
$end = microtime(true);
echo &#39;run time:&#39;.($end-$start).&#39;s<br>&#39;;
echo &#39;memory usage:&#39;.(memory_get_usage()/1024).&#39;KB&#39;;
?>
implode < msgpack_pack < >
implode       1.3225722312927s    628.50KB
serialize     2.0553789138794s    628.32KB
json_encode   2.5058920383453s    628.34KB
msgpack_pack  1.6431028842926s    628.24KB
Comparez les performances d'exploser, unserialize, json_decode, msgpack_unpack

Résultat : l'utilisation de la mémoire est similaire, en cours d'exécution time

explode < serialize < msgpack_unpack < json_decode

Pour résumer, puisque imploser/exploser ne convient pas à l'utilisation de structures complexes, sérialiser, json , Il existe trois types de msgpack.

<?php
$data = file_get_contents(&#39;implode.txt&#39;);
//$data = file_get_contents(&#39;serialize.txt&#39;);
//$data = file_get_contents(&#39;json.txt&#39;);
//$data = file_get_contents(&#39;msgpack.txt&#39;);
$start = microtime(true);
$i = 1000000;
while($i>0){
    $tmp = explode(&#39;,&#39;,$data);
    //$tmp = unserialize($data);
    //$tmp = json_decode($data, true);
    //$tmp = msgpack_unpack($data);
    $i--;
}
$end = microtime(true);
echo &#39;run time:&#39;.($end-$start).&#39;s<br>&#39;;
echo &#39;memory usage:&#39;.(memory_get_usage()/1024).&#39;KB&#39;;
?>
explode         1.7446749210358s    628.74KB
unserialize     2.1386790275574s    628.67KB
json_decode     5.2423169612885s    628.84KB
msgpack_unpack  2.2290098667145s    628.63KB
Et parmi les trois comparaisons, la vitesse d'exécution optimale, l'utilisation de la mémoire et l'utilisation de l'espace sont msgpack, suivi de sérialiser et enfin json.

Si possible, il est recommandé d'utiliser msgpack pour sérialiser les données .

À propos de msgpack, vous pouvez consulter l'article que j'ai écrit auparavant : "Format de sérialisation de MessagePack"

Cet article concerne l'implosion/l'explosion de php , serialize, json , msgpack pour comparer les performances. Pour plus de contenu connexe, veuillez faire attention au site Web chinois de php.

Recommandations associées :

Explication de la méthode de remplacement php str_replace pour des heures spécifiées

Instructions d'utilisation de header, headers_sent, headers_list, header_remove

Solution pour changer le type de champ entier renvoyé par mysql via PDO en type String

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!

Déclaration:
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