Voici un comparatif rapide des fonctions PHP5 permettant de coder un objet en phrase. Cette pratique est utile lorsque l'on souhaite conserver une structure longue à initialiser pour la recharger ensuite très rapidement.
J'ai utilisé en source un tableau unidimensionnel provenant du logiciel MediaWiki. Il s'agit d'une liste de références à des messages en anglais et traduits en français. Le fichier est codé en UTF-8.
Le script sous PHP 5.2.11:
<?php
# Load a one dimension array named $messages
include "mediawiki/languages/messages/MessagesFr.php";
function code_time_for( $function, $on, $iter ) {
$start = microtime(true);
for( $i=0;$i<$iter;$i++) {
call_user_func( $function, $on );
}
$end = microtime(true);
return
sprintf("Ran $iter x %-11s in: %9.3f ms", $function, 1000*($end - $start));
}
$msg_ser = serialize( $messages );
$msg_json = serialize( $messages );
$times = 777;
# Lets have a look at encoding:
print code_time_for( 'serialize' , $messages, $times ) . "\n";
print code_time_for( 'json_encode', $messages, $times ) . "\n";
# And then compare decoding functions:
print code_time_for( 'unserialize', $msg_ser , $times ) . "\n";
print code_time_for( 'json_decode', $msg_json, $times ) . "\n";
# Load a one dimension array named $messages
include "mediawiki/languages/messages/MessagesFr.php";
function code_time_for( $function, $on, $iter ) {
$start = microtime(true);
for( $i=0;$i<$iter;$i++) {
call_user_func( $function, $on );
}
$end = microtime(true);
return
sprintf("Ran $iter x %-11s in: %9.3f ms", $function, 1000*($end - $start));
}
$msg_ser = serialize( $messages );
$msg_json = serialize( $messages );
$times = 777;
# Lets have a look at encoding:
print code_time_for( 'serialize' , $messages, $times ) . "\n";
print code_time_for( 'json_encode', $messages, $times ) . "\n";
# And then compare decoding functions:
print code_time_for( 'unserialize', $msg_ser , $times ) . "\n";
print code_time_for( 'json_decode', $msg_json, $times ) . "\n";
Le résultat avec 777 occurrences :
Ran 777 x serialize in: 1211.259 ms Ran 777 x json_encode in: 3897.529 ms Ran 777 x unserialize in: 1359.995 ms Ran 777 x json_decode in: 1888.151 ms
Les fonctions PHP restent plus performantes. En tout cas pour ce tableau.
1 commentaire:
PHP serialize() est vraiment plus lent que json_encode() en PHP 5.3 (au moins sur ce cas là : hashs imbriqués de strings & integers.
Cf. http://gist.github.com/300366
Enregistrer un commentaire