![]() |
1
532
取决于你的优先顺序。 如果性能是你的绝对驾驶特性,那么一定要用最快的。在你做出选择之前,要确保你对这些差异有充分的了解。
可能还有其他一些我目前无法想到的差异。 比较两者的简单速度测试
|
![]() |
2
231
杰森 比PHP的序列化格式更简单、更快,应该使用 除非 :
|
![]() |
3
58
我写了一篇关于这个主题的博客:“ Cache a large array: JSON, serialize or var_export? “。在本文中,我们发现对于小到大的数组,序列化是最好的选择。对于非常大的阵列(>70MB),JSON是更好的选择。 |
![]() |
4
51
你也可能对 https://github.com/phadej/igbinary -它为PHP提供了不同的序列化“引擎”。 在64位平台上使用php 5.3.5,我的随机/任意“性能”数据显示: 杰森:
本地PHP:
Igbinary:
因此,使用igbinary_serialize()和igbinary_unserialize()更快,并且占用的磁盘空间更少。 我使用了上面的FillArray(0,3)代码,但使数组键的字符串更长。 igbinary可以存储与php本机serialize相同的数据类型(因此对象等没有问题),如果愿意,您可以告诉php5.3使用它进行会话处理。 也见 http://ilia.ws/files/zendcon_2010_hidden_features.pdf -特别是幻灯片14/15/16 |
![]() |
5
24
Y刚刚测试了serialized和json编码和解码,加上它将存储字符串的大小。
我们可以得出这样的结论:JSON编码更快,得到的字符串更小,但非序列化对字符串解码更快。 |
![]() |
6
15
如果您正在缓存最终希望在以后某个时间点“包含”的信息,则可能需要尝试使用 var_export . 这样,您只接受“序列化”中的命中,而不接受“非序列化”中的命中。 |
![]() |
7
11
我增加了测试以包括非标准化性能。这是我得到的数字。
因此,JSON似乎编码更快,但解码速度较慢。因此,它可能取决于您的应用程序以及您希望做的最多。 |
![]() |
8
8
似乎Serialize是我要使用的,原因有两个:
|
![]() |
9
8
非常好的主题,在阅读了几个答案之后,我想分享我在这个主题上的实验。 我得到了一个用例,在这个用例中,几乎每次与数据库交谈时都需要查询一些“巨大”的表(不要问为什么,只问一个事实)。数据库缓存系统不合适,因为它不会缓存不同的请求,所以我想介绍一下PHP缓存系统。
我试过
表有14355个条目,有18列,这些是关于读取序列化缓存的测试和统计信息: 杰森:
正如你们所说,最大的不便是
MSGPACK@哈奇提到 msgpack . 漂亮的网站。我们试试看,好吗?
这更好,但需要一个新的扩展;编译有时害怕的人… IG-二进制的
@金格多格提到
igbinary
. 注意我已经设置了
比味精包好。不过,这一个也需要编译。
|
![]() |
10
6
我已经在一个相当复杂、适度嵌套的多散列(其中包含各种数据(字符串、空值、整数),以及序列化/非序列化上对此进行了非常彻底的测试,结果比json_encode/json_decode快得多。 JSON在我的测试中唯一的优势是它的“打包”尺寸更小。 这些都是在php 5.3.3下完成的,如果您需要更多的细节,请告诉我。 下面是测试结果,然后是生成它们的代码。我不能提供测试数据,因为它会泄露我不能在野外放手的信息。
|
![]() |
11
5
我也做了一个小基准。我的结果是一样的。但我需要解码性能。我注意到,就像上面提到的一些人一样,
我的伪基准:
在avarage:unserialize赢得96次超过4倍的JSON解码。在2.5毫秒以上的时间内,可用率约为1.5毫秒。 |
![]() |
12
2
在做出最终决定之前,请注意JSON格式对于关联数组是不安全的。-
输出为:
|
![]() |
13
1
仅供参考——如果您希望将数据序列化为易于阅读和理解的内容(如JSON),但具有更多的压缩和更高的性能,则应该签出 messagepack. |
![]() |
14
1
在这里查看结果(很抱歉黑客将PHP代码放在JS代码框中): http://jsfiddle.net/newms87/h3b0a0ha/embedded/result/
结果:
我在现实数据上做了一个测试脚本,用于比较JSON编码与序列化,以及JSON解码与非序列化。测试是在一个生产中的电子商务站点的缓存系统上运行的。它只需获取缓存中已经存在的数据,并测试对所有数据进行编码/解码(或序列化/非序列化)的时间,然后将其放入一个易于查看的表中。 我在php 5.4共享主机服务器上运行了这个。 结果是非常确凿的,对于这些大到小的数据集,序列化和非序列化是明显的赢家。特别是在我的用例中,JSON解码和非序列化对于缓存系统来说是最重要的。在这里,非宗教化几乎是无处不在的赢家。它通常是JSON解码的2到4倍(有时是6到7倍)。 注意到@peter bailey结果的差异是很有趣的。 下面是用于生成结果的PHP代码:
|
![]() |
15
1
首先,我更改了脚本以进行更多的基准测试(还执行了1000次运行,而不仅仅是1次):
我使用了php 7的这个版本:
我的结果是:
所以 清晰地 ,序列化/非序列化是 最快的 方法,而json_编码/解码是 最便携。 如果您考虑一个场景,您读/写序列化数据的频率是10倍,或者比从非PHP系统发送或接收的频率更高,那么您最好使用序列化/非序列化,并在序列化之前让它json_编码或json_解码。 |
![]() |
16
0
如果您想备份数据并将其恢复到另一台机器上或通过ftp,JSON更好。 例如,对于serialize,如果您将数据存储在Windows服务器上,请通过ftp下载数据并将其还原到Linux服务器上,由于charachter重新编码,它将无法再工作,因为serialize存储字符串的长度,并且以unicode>utf-8转码,某些1字节的characher可能变为2字节长,从而导致算法崩溃。 |
![]() |
17
0
THX-对于此基准代码:
我在用于配置的数组上的结果如下:
json编码0.003151783599854秒
所以-用你自己的数据测试它。 |
![]() |
18
0
如果要总结人们在这里所说的话,json解码/编码似乎比序列化/非序列化快,但是 如果执行var_dump,则会更改序列化对象的类型。 如果出于某种原因要保留该类型,请使用序列化! (例如stdclass vs array) 序列化/非序列化:
JSON编码/解码
如您所见,json_编码/解码将所有转换为stdclass,这不是很好,对象信息丢失…所以要根据需要来决定,特别是如果它不仅仅是数组… |
![]() |
19
0
我建议您使用超级缓存,这是一种不使用的文件缓存机制
https://packagist.org/packages/smart-php/super-cache 前任:
|
![]() |
Sweepy Dodo · JSON lite的格式化 5 月前 |
![]() |
user24242514 · 将嵌套查询字符串请求转换为字典 6 月前 |
![]() |
Shane Harley · 通过这些JSON元素进行映射 6 月前 |
![]() |
Shane Harley · 将HTML作为JSON字符串的一部分? 6 月前 |
![]() |
Matt Miles · 如何将嵌套的JSON转换为数据帧? 6 月前 |