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


Posted in PHP onJune 09, 2010

于是便联想到PHP中的对象怎么样序列化存储性价比最高呢?接着想到了之前同事推荐的JSON编码和解码函数。
据他所说,json_encode和json_decode比内置的serialize和unserialize函数要高效。
于是我决定动手实验,证实一下同事所说的情况是否属实。
实验分别在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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
Yii2 assets清除缓存的方法
May 16 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 #PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 #PHP
腾讯QQ php程序员面试题目整理
Jun 08 #PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 #PHP
php的字符串用法小结
Jun 08 #PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 #PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 #PHP
You might like
php反弹shell实现代码
2009/04/22 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
php实现的生成排列算法示例
2019/07/25 PHP
JS 建立对象的方法
2007/04/21 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
python实现得到一个给定类的虚函数
2014/09/28 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python如何处理程序无法打开
2020/06/16 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
自我鉴定怎么写
2014/01/12 职场文书
共产党员承诺书
2014/03/25 职场文书
企业总经理任命书
2014/06/05 职场文书
董事长开业致辞
2015/07/29 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
Python中的pprint模块
2021/11/27 Python
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python