JSON bisa mengubah array menjadi string dengan format tertentu.
Dan juga sebaliknya, JSON bisa mengubah string terformat menjadi array.
Format JSON dikenali tidak hanya di PHP tapi juga di javascript misalnya.
Fungsi serialize() juga sama seperti JSON, bisa mengubah array menjadi string dengan format tertentu dan sebaliknya.
Tapi fungsi serialize() hanya dikenali di PHP.
Kelebihan JSON :
Kekurangan JSON :
Kelebihan Serialize :
Kekurangan Serialize :
Dari data2 di atas, misalnya tujuan kita hanya di bahasa PHP, misalnya menyimpan / membaca array di / dari database, maka kita cek terlebih dahulu. Di koding PHP kita mana yang lebih banyak prosesnya, proses encode (writing) / decode (reading).
Kalau lebih banyak proses writing, pakailah JSON.
Kalau lebih banyak proses reading, pakailah serialize.
Sebagai tambahan, ini adalah kode untuk bandingin JSON & serialize baik di proses writing / reading.
Dan juga sebaliknya, JSON bisa mengubah string terformat menjadi array.
Format JSON dikenali tidak hanya di PHP tapi juga di javascript misalnya.
Fungsi serialize() juga sama seperti JSON, bisa mengubah array menjadi string dengan format tertentu dan sebaliknya.
Tapi fungsi serialize() hanya dikenali di PHP.
Kelebihan JSON :
- cross-language, tidak hanya di PHP.
- Lebih cepat daripada serialize() pada proses "encode" data.
Kekurangan JSON :
- Lebih lambat daripada unserialize() pada proses "decode" data.
- Tidak bisa menyimpan data dalam bentuk object (khususnya di PHP).
- Dibutuhkan PHP dengan versi 5 (PHP 5 >= 5.2.0, PECL json >= 1.2.0).
Kelebihan Serialize :
- Lebih cepat daripada json_decode() pada proses "decode" data.
- Bisa menyimpan data dalam bentuk object di PHP.
- Tidak butuh PHP dengan versi tinggi. Cukup dengan PHP versi 4.
Kekurangan Serialize :
- Lebih lambat daripada json_encode() pada proses "encode" data.
Dari data2 di atas, misalnya tujuan kita hanya di bahasa PHP, misalnya menyimpan / membaca array di / dari database, maka kita cek terlebih dahulu. Di koding PHP kita mana yang lebih banyak prosesnya, proses encode (writing) / decode (reading).
Kalau lebih banyak proses writing, pakailah JSON.
Kalau lebih banyak proses reading, pakailah serialize.
Sebagai tambahan, ini adalah kode untuk bandingin JSON & serialize baik di proses writing / reading.
PHP:
<?php
ob_start();
$s = '';
define('TEST_COUNT', 1000);// number of tests
define('TEST_MODE', 'decode');// decode or encode
// Make a bit, honkin test array
// You may need to adjust this depth to avoid memory limit errors
//$testArray = fillArray( 0, 100 );
$a = array(
0 => 23,
4 => 213,
'awdawd' => 'awd'
);
$testArray = array_merge($a, range(1, 100));
$json_string = json_encode($testArray);
$serialized_string = serialize($testArray);
$json_win = 0;
$serialize_win = 0;
$json_perc_total = 0;
$serialize_perc_total = 0;
if (TEST_MODE == 'decode') {
for ($i = 1; $i<= constant('TEST_COUNT');$i++) {
// Time json encoding
$start = microtime( true );
//json_encode( $testArray );
json_decode($json_string);
$jsonTime = microtime( true ) - $start;
//echo "JSON encoded in $jsonTime seconds<br>";
// Time serialization
$start = microtime( true );
//serialize( $testArray );
unserialize($serialized_string);
$serializeTime = microtime( true ) - $start;
//echo "PHP serialized in $serializeTime seconds<br>";
$json_perc = ($serializeTime / $jsonTime - 1 ) * 100;
$serialize_perc = ($jsonTime / $serializeTime - 1 ) * 100;
$json_perc_total += $json_perc;
$serialize_perc_total += $serialize_perc;
// Compare them
if ( $jsonTime < $serializeTime )
{
$s .= "<strong style=\"color:#009900\">json_decode()</strong> was roughly " . number_format( $json_perc, 2 ) . "% faster than unserialize()";
$json_win++;
}
else if ( $serializeTime < $jsonTime )
{
$s .= "<strong style=\"color:#CC0000\">unserialize()</strong> was roughly " . number_format( $serialize_perc, 2 ) . "% faster than json_decode()";
$serialize_win++;
} else {
$s .= 'Impossible!';
}
$s .= '<br />';
}
} else {
for ($i = 1; $i<= constant('TEST_COUNT');$i++) {
// Time json encoding
$start = microtime( true );
json_encode( $testArray );
$jsonTime = microtime( true ) - $start;
//echo "JSON encoded in $jsonTime seconds<br>";
// Time serialization
$start = microtime( true );
serialize( $testArray );
$serializeTime = microtime( true ) - $start;
//echo "PHP serialized in $serializeTime seconds<br>";
$json_perc = ($serializeTime / $jsonTime - 1 ) * 100;
$serialize_perc = ($jsonTime / $serializeTime - 1 ) * 100;
$json_perc_total += $json_perc;
$serialize_perc_total += $serialize_perc;
// Compare them
if ( $jsonTime < $serializeTime )
{
$s .= "<strong style=\"color:#009900\">json_encode()</strong> was roughly " . number_format( $json_perc, 2 ) . "% faster than serialize()";
$json_win++;
}
else if ( $serializeTime < $jsonTime )
{
$s .= "<strong style=\"color:#CC0000\">serialize()</strong> was roughly " . number_format( $serialize_perc, 2 ) . "% faster than json_encode()";
$serialize_win++;
} else {
$s .= 'Impossible!';
}
$s .= '<br />';
}
}
$perc1 = round($json_win / constant('TEST_COUNT') * 100, 2);
$perc2 = round($serialize_win / constant('TEST_COUNT') * 100, 2);
echo '<h1>Mode = '.TEST_MODE.'</h1>';
echo "<p><strong style=\"color:#009900\">JSON</strong> Win = $json_win ($perc1 %) average perc = ".round($json_perc_total / constant('TEST_COUNT'), 2).",<br />
<strong style=\"color:#CC0000\">Serialize</strong> win = $serialize_win ($perc2 %) average perc = ".round($serialize_perc_total / constant('TEST_COUNT'), 2)."</p>";
echo $s;
?>