2021-03-18 19:43:20JSON和serialize和igbinary和msgpack区别
您现在的位置是: 首页 > php > JSON和serialize和igbinary和msgpack区别
JSON
即JavaScript Object Notation,是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
serialize
它是php的一个方法,将变量序列化,返回一个具有变量类型和结构的字符串表达式。
igbinary
php序列化的一个代替方案,并未加入到php的标准库中。该序列话主要是对时间和空间消耗的文字表述,igbinary提供结构紧凑二进制形式。
msgpack
全程MessagePack,是一个基于二进制高效的对象序列化类库,可用于跨语言通信,它可以像JSON那样,在许多种语言之间交换结构对象,支持Python、Ruby、Java、C/C++等众多语言。
由于igbinary和msgpack不是php自带的,因此我们需要先进行安装。安装步骤略。
简单运行
为了便于了解它们的数据结构,编写测试代码,输出格式化后的数据。
<?php
$data = array( 'name' => 'Shy Song',
'age' => 25,
'country' => 'China'
);
$json_data = json_encode($data);
$serialize_data = serialize($data);
$igbinary_data = igbinary_serialize($data);
$msgpack_data = msgpack_pack($data);
print 'JSON: ' . $json_data;
print 'length: ' . strlen($json_data);
print 'serialize: ' . $serialize_data;
print 'length: ' . strlen($serialize_data);
print 'igbinary: ' . $igbinary_data;
print 'length: ' . strlen($igbinary_data);
print 'msgpack: ' . $msgpack_data;
print 'length: ' . strlen($msgpack_data);
输出结果如下:
JSON:
{"name":"Shy","age":25,"country":"China"}
length: 41
serialize:
a:3:{s:4:"name";s:3:"Shy";s:3:"age";i:25;s:7:"country";s:5:"China";}
length: 68
igbinary:
nameShyagecountryChina;
length: 40
msgpack:
��name�Shy�age�country�China
length: 29
可以看出,msgpack最短但不可读,serialize最长,json和igbinary长度差不多。注意,igbinary的实际数据比输出结果要长,只是不可显示。
性能对比
<?php
$info = array( 'name' => 'Shy',
'age' => 25,
'country' => 'China'
);
$data = array();
for($i = 0; $i < 1000; $i++)
{
$data[$i] = $info;
}
$time_start = microtime(true);
for($i = 0; $i < 10000; $i++)
{
$json_data = json_encode($data);
#$serialize_data = serialize($data);
#$igbinary_data = igbinary_serialize($data);
#$msgpack_data = msgpack_pack($data);
}
$time_end = microtime(true);
echo round($time_end - $time_start, 3);
得到的结果是,JSON 7.232秒,serialize 11.887秒,igbinary 1.156秒,msgpack 1.148秒。
通过以上对比,我们可以看到性能方面igbinary和msgpack远远优于JSON和serialize,且当面对深度的多维数组时,json和serialize的性能会大幅度下降。
总结
2. serialize常用于方法、类的序列化,适用于在不同程序间进行函数的传输。
3. msgpack比JSON更快速也更轻巧,压缩后的数据格式会比json小,但是其可读性低,适用于对传输性能要求高且不关心数据格式的场景使用。比如配合
4. igbinary为结构化数据,速度快,内存占用低,适用于memcached、redis等类似的基于内存的储量序列化的数据。
关键字词: JSON和serialize和igbinary和msgpack区别
上一篇: PHP 魔术方法 __call 与 __callStatic 方法
下一篇: git命令-操作演示
相关文章
-
暂无