php的一个 igbinary 扩展可以代替php自带的序列化函数serialize,因为它的性能更好,而且占用的字节数也更少。
下面是对 igbinary ,serialize ,json_encode三者的性能做的一个简单测试。
材料准备:
以一个包含1,000,000(百万)个元素的数组做为原始数据,分别以 json, serialize, igbinary进行序列化和反向操作。
查看它们花费的时间。
<?php
ini_set('memory_limit', '512m');
$arr = array_fill(0, 1000000, rand(1, 9999));
// ====================
print('============ Json ============'. PHP_EOL);
// 1. json encode
$start = microtime(true);
$export = json_encode($arr);
$end = microtime(true);
$cost_time = $end - $start;
print('Json Encode: '. $cost_time. PHP_EOL);
// 2. json decode
$start = microtime(true);
$import = json_decode($export);
$end = microtime(true);
$cost_time = $end - $start;
print('Json Decode: '. $cost_time. PHP_EOL);
// ====================
print('============ Serialize ============'. PHP_EOL);
// 3. serialize
$start = microtime(true);
$export = serialize($arr);
$end = microtime(true);
$cost_time = $end - $start;
print('Serialize: '. $cost_time. PHP_EOL);
// 4. unserialize
$start = microtime(true);
$import = unserialize($export);
$end = microtime(true);
$cost_time = $end - $start;
print('Unserialize: '. $cost_time. PHP_EOL);
// ====================
print('============ Igbinary Serialize ============'. PHP_EOL);
// 5. igbinary_serialize
$start = microtime(true);
$export = igbinary_serialize($arr);
$end = microtime(true);
$cost_time = $end - $start;
print('Igbinary_serialize:'. $cost_time. PHP_EOL);
// 6. igbinary_unserialize
$start = microtime(true);
$import = igbinary_unserialize($export);
$end = microtime(true);
$cost_time = $end - $start;
print('Igbinary_unserialize:'. $cost_time. PHP_EOL);
print('============ Test Completed! ============'. PHP_EOL);
测试结果:
============ Test Start! ============
============ Json ============
Json Encode: 0.018487930297852
Json Decode: 0.081058025360107
============ Serialize ============
Serialize: 0.047405004501343
Unserialize: 0.071050882339478
============ Igbinary Serialize ============
Igbinary_serialize:0.02123498916626
Igbinary_unserialize:0.02552604675293
============ Test Completed! ============
小结:
速度方面:
优先级排列为 igbinary > json > serialize。
占用字节数:
json > igbinary > serialize
在没有中文字符的情况下,json胜出,igbinary次之,serialize最后。
参考网址:https://blog.csdn.net/weixin_34149796/article/details/90330538