热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中的序列化方法性能对比

对比以下四个方法1、json_encode序列化后可阅读,多语言通用协议。2、serialize序列化后可阅读,非通用协议,只能用在

对比以下四个方法

1、json_encode
序列化后可阅读,多语言通用协议。2、serialize
序列化后可阅读,非通用协议,只能用在PHP3、swoole_serialize
序列化后不可阅读,非通用协议,只能用在PHP4、msgpack
序列化后不可阅读,多语言通用协议。

PHP版本 7.2.27

安装扩展

pecl install swoole_serialize-0.1.1
pecl install msgpackextension=msgpack
extension=swoole_serializephp --ri msgpack
php --ri swoole_serialize

使用 var_export($list, true) 原样导出数组

$arr = array(0 =>array('id' => 673,'userid' => 209778,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-17 15:26:40',),1 =>array('id' => 675,'userid' => 4887823,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-17 20:32:17',),2 =>array('id' => 680,'userid' => 4987463,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-18 17:45:58',),3 =>array('id' => 681,'userid' => 4987463,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 30,'createtime' => '2020-02-18 17:50:28',),4 =>array('id' => 686,'userid' => 4987463,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 30,'createtime' => '2020-02-18 21:13:17',),5 =>array('id' => 689,'userid' => 4987463,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 30,'createtime' => '2020-02-19 00:10:00',),6 =>array('id' => 694,'userid' => 5026514,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-19 07:46:00',),7 =>array('id' => 698,'userid' => 5061307,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-19 12:42:48',),8 =>array('id' => 699,'userid' => 5061307,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 5,'createtime' => '2020-02-19 12:44:40',),9 =>array('id' => 700,'userid' => 5061307,'activity_id' => 27,'from_type' => 1,'type' => 127,'award_type' => 1,'award_value' => 10,'createtime' => '2020-02-19 12:45:40',),
);
for ($j &#61; 0; $j < 7; $j&#43;&#43;) {$arr &#61; array_merge($arr, $arr);
}echo count($arr) . &#39;个元素&#39; . PHP_EOL;function encode($arr)
{$s1 &#61; json_encode($arr);$s2 &#61; serialize($arr);$s3 &#61; swoole_pack($arr);$s4 &#61; msgpack_pack($arr);$l1 &#61; strlen($s1);$l2 &#61; strlen($s2);$l3 &#61; strlen($s3);$l4 &#61; strlen($s4);echo "字节长度&#xff1a;" . PHP_EOL;echo "1、json: {$l1}" . PHP_EOL;echo "2、serialize: {$l2}" . PHP_EOL;echo "3、swoole_pack: {$l3}" . PHP_EOL;echo "4、msgpack_pack: {$l4}" . PHP_EOL . PHP_EOL;$max &#61; 5000;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {json_encode($arr);}$end &#61; microtime(true);$t1 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {serialize($arr);}$end &#61; microtime(true);$t2 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {swoole_pack($arr);}$end &#61; microtime(true);$t3 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {msgpack_pack($arr);}$end &#61; microtime(true);$t4 &#61; $end - $start;echo "序列化耗时&#xff1a;" . PHP_EOL;echo "1、json: {$t1}" . PHP_EOL;echo "2、serialize: {$t2}" . PHP_EOL;echo "3、swoole_pack: {$t3}" . PHP_EOL;echo "4、msgpack_pack: {$t4}" . PHP_EOL . PHP_EOL;// ------------------------------------------------------------------------$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {json_decode($s1, true);}$end &#61; microtime(true);$t1 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {unserialize($s2);}$end &#61; microtime(true);$t2 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {swoole_unpack($s3);}$end &#61; microtime(true);$t3 &#61; $end - $start;$start &#61; microtime(true);for ($i &#61; 0; $i < $max; $i&#43;&#43;) {msgpack_unpack($s4);}$end &#61; microtime(true);$t4 &#61; $end - $start;echo "反序列化耗时&#xff1a;" . PHP_EOL;echo "1、json: {$t1}" . PHP_EOL;echo "2、serialize: {$t2}" . PHP_EOL;echo "3、swoole_pack: {$t3}" . PHP_EOL;echo "4、msgpack_pack: {$t4}" . PHP_EOL . PHP_EOL;
}encode($arr);

打印结果
在这里插入图片描述
由此可见&#xff1a;

  • swoole_pack 可将数据压缩的最小&#xff0c;并且耗时最小&#xff0c;但只能用在PHP语言&#xff1b;
  • msgpack_pack 耗时和 serialize 差不多&#xff0c;但是数据压缩的更小&#xff0c;并且多语言通用协议&#xff1b;
  • 如果数据存储在redis&#xff0c;那么数据压缩比例是个很重要的指标&#xff1b;
  • serialize 和 json 相比&#xff0c;占用存储空间大&#xff0c;但耗时缩短了一倍&#xff1b;
  • 很明显反序列化的耗时是序列化的3倍左右&#xff1b;

推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
杭州琦琦妈_120
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有