服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP中json_encode、json_decode与serialize、unserialize的性能测试分析

PHP中json_encode、json_decode与serialize、unserialize的性能测试分析

2019-11-01 13:42PHP技术网 PHP教程

今天偶然在想,如果用PHP写一个类似BDB的基于文件的Key-Value小型数据库用于存储非结构化的记录型数据,不知道效率会如何?

于是便联想到PHP中的对象怎么样序列化存储性价比最高呢?接着想到了之前同事推荐的JSON编码和解码函数。 
据他所说,json_encodejson_decode比内置的serializeunserialize函数要高效。 
于是我决定动手实验,证实一下同事所说的情况是否属实。 
实验分别在PHP 5.2.13和PHP 5.3.2环境下进行。 
用同一个变量,分别用以上方式进行编码或解码10000次,并得出每个函数执行10000次所需的时间。 
以下是PHP 5.2.13环境其中一次测试结果: 

复制代码代码如下:


json : 190 
serialize : 257 
json_encode : 0.08364200592041 
json_decode : 0.18004894256592 
serialize : 0.063642024993896 
unserialize : 0.086990833282471 
DONE. 


以下是PHP 5.3.2环境其中一次测试结果: 

复制代码代码如下:


json : 190 
serialize : 257 
json_encode : 0.062805891036987 
json_decode : 0.14239192008972 
serialize : 0.048481941223145 
unserialize : 0.05927300453186 
DONE. 


这次实验得到的结论是: 
json_encode和json_decode的效率并没有比serialize和unserialize的效率高,在反序列化的时候性能相差两倍左右,PHP 5.3执行效率比PHP 5.2略有提升。 
以下是我用来做测试的代码: 

复制代码代码如下:


<?php 
$target = array ( 
'name' => '全能头盔', 
'quality' => 'Blue', 
'ti_id' => 21302, 
'is_bind' => 1, 
'demand_conditions' => 
array ( 
'HeroLevel' => 1, 
), 
'quality_attr_sign' => 
array ( 
'HeroStrength' => 8, 
'HeroAgility' => 8, 
'HeroIntelligence' => 8, 
), 
); 
$json = json_encode($target); 
$seri = serialize($target); 
echo "json :\t\t" . strlen($json) . "\r\n"; 
echo "serialize :\t" . strlen($seri) . "\r\n\r\n"; 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 

json_encode($target); 

$etime = microtime(true); 
echo "json_encode :\t" . ($etime - $stime) . "\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 

json_decode($json); 

$etime = microtime(true); 
echo "json_decode :\t" . ($etime - $stime) . "\r\n\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 

serialize($target); 

$etime = microtime(true); 
echo "serialize :\t" . ($etime - $stime) . "\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 

unserialize($seri); 

$etime = microtime(true); 
echo "unserialize :\t" . ($etime - $stime) . "\r\n\r\n"; 
echo 'DONE.'; 
?> 

延伸 · 阅读

精彩推荐
  • PHP教程360搜索引擎自动收录php改写方案

    360搜索引擎自动收录php改写方案

    这篇文章主要介绍了360搜索引擎自动收录php改写方案的相关资料,需要的朋友可以参考下 ...

    6341176081902019-10-10
  • PHP教程PHP asXML()函数讲解

    PHP asXML()函数讲解

    今天小编就为大家分享一篇关于PHP asXML()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册5142019-06-23
  • PHP教程使用phpunit进行接口自动化测试

    使用phpunit进行接口自动化测试

    下面小编就为大家分享一篇使用phpunit进行接口自动化测试,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    爱吃烧麦的管3522019-10-16
  • PHP教程laravel ORM 只开启created_at的几种方法总结

    laravel ORM 只开启created_at的几种方法总结

    下面小编就为大家分享一篇laravel ORM 只开启created_at的几种方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    小曹小盆友1242019-10-23
  • PHP教程PDO::inTransaction讲解

    PDO::inTransaction讲解

    今天小编就为大家分享一篇关于PDO::inTransaction讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册2962019-06-26
  • PHP教程ThinkPHP5 的简单搭建和使用详解

    ThinkPHP5 的简单搭建和使用详解

    这篇文章主要介绍了ThinkPHP5 的简单搭建和使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    K0rz3n5082019-08-29
  • PHP教程PHP调用全国天气预报数据接口查询天气示例

    PHP调用全国天气预报数据接口查询天气示例

    这篇文章主要介绍了PHP调用全国天气预报数据接口查询天气,涉及第三方平台的key申请、接口数据调用及curl相关操作技巧,需要的朋友可以参考下...

    yunmen2472019-06-11
  • PHP教程PHP 数组和字符串互相转换实现方法

    PHP 数组和字符串互相转换实现方法

    PHP 中由于数组和字符串这两种变量类型是如此常用,以至于 PHP 具有两个函数,可以在字符串和数组之间互相进行转换...

    脚本之家2072019-05-28