我把一个 php 数组分别保存为 serialize 和 json,然后
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
$ser = file_get_contents('gdip.ser');
$arr = unserialize($ser);
}
$l = microtime(true) - $start;
echo $l."\n";
//
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
$json = file_get_contents('gdip.json');
$arr = json_decode($json, true);
}
$l = microtime(true) - $start;
echo $l."\n";
然后运行得到的结果
0.939453125
2.0195319652557
这能不能说明保存成 serialize 格式读取效率更快?
1
2kCS5c0b0ITXE5k2 2020-07-16 17:12:48 +08:00
php5.3 后对 json 有优化 但是还是比 serialize 在数据量大的情况下 要慢
|
2
takemeaway 2020-07-16 17:13:56 +08:00
不能说明。 你怎么不贴两个文件的大小?
file_get_contents 占用了时间。 |
3
frozenway OP 我这个是在 php7.1 环境下运行的
|
4
virusdefender 2020-07-16 17:16:25 +08:00
serialize 注意安全问题
|
5
frozenway OP @takemeaway gdip.ser 文件 271K , gdip.json 文件 203K ,他们对应的 php 数组是同一个
|
6
frozenway OP @virusdefender 什么安全问题?
|
7
2kCS5c0b0ITXE5k2 2020-07-16 17:21:48 +08:00
@frozenway 用 json 只是很多情况是因为可移植性强 后期这个文件 可以用任何一个语言来读 用 serialize 就不可以
|
8
sockball07 2020-07-16 17:23:57 +08:00
随便一搜就有相关文章嘛 https://segmentfault.com/a/1190000020755226
总结是说 serialize 对中文,也就是多字节效率更高 就记得 serialize 占的空间大一些... |
9
takemeaway 2020-07-16 17:26:27 +08:00
我测试是 json 的快,数据量比你小点。
而且不要用 file 打开。直接变量写上试试。 |
10
MeteorCat 2020-07-16 17:27:40 +08:00 via Android
我是默认选用 json,好处是具有通用性,以前项目从 php 用 java 重构之后读写数据库里面的 json 配置毫无压力
|
11
guanhui07 2020-07-16 17:28:12 +08:00
json_encode 吧
|
12
jfcherng 2020-07-16 17:31:19 +08:00
> 为什么网上的人说 json_encode 的效率比 serialize 高,而我自己测试则相反?
可是你測試的是 json_decode |
13
wangritian 2020-07-16 17:33:03 +08:00
把读盘丢到循环外面再测测
如果效率没有数量级的差距,推荐 json |
15
webshe11 2020-07-16 17:37:29 +08:00
搞安全的提一句,如果数据量不大,使用不频繁,还是用 json 吧,json 比较纯粹,没那么多么蛾子
反序列化漏洞了解一下 |
16
lovecy 2020-07-16 17:39:02 +08:00
你这个测试例子就很奇怪,file_get_contents 非要写在循环里面,并没有真正的测试单纯的 unseralize 和 json_decode 的性能
|
17
imdong 2020-07-16 17:40:58 +08:00
曾经做过测试,忘记这两者那个效率高,但无论用那种方式,都比 return array 效率高处不止一个量级。
然后最后还是选定了 seralize 保存。 五年前版本,不代表现在情况。 当时的需求是做垃圾站用的。 |
18
jfcherng 2020-07-16 17:44:08 +08:00
拿 https://www.cc1021.com/article/212.html 的 script 測試
``` [USER@PC Desktop]$ php8 -v PHP 8.0.0alpha2 (cli) (built: Jul 7 2020 13:53:52) ( NTS Visual C++ 2019 x64 ) Copyright (c) The PHP Group Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies with Zend OPcache v8.0.0alpha2, Copyright (c), by Zend Technologies [USER@PC Desktop]$ php8 test.php json : 190 serialize : 257 json_encode : 0.010500907897949 json_decode : 0.046006202697754 serialize : 0.014501810073853 unserialize : 0.027003049850464 ``` |
19
jfcherng 2020-07-16 17:46:55 +08:00
encode 感覺差不多, decode 差異比較明顯
|
20
leon1900 2020-07-16 17:47:27 +08:00
在我印象中一直是 serialize 效率高一点,json 通用性更强一点,不过这两个串化效率都不太行。
之前看有个人分析过,在 70M 的数组以下 serialize 效率高,大数组 json_encode 效率更爱 |
21
frozenway OP @lovecy 写在里面是为了测 serialize 文件存储的大小比 json 的大的情况下,读取并反序列成数组的效率比 json 的如何,确保文件大小更大的情况下,依然读取更快
|
22
NerverLibis 2020-07-16 17:49:34 +08:00 via iPhone
print_r 序列化 两件套,2020 年还有用 php 的吗
|
23
wnpllrzodiac 2020-07-16 17:50:07 +08:00 via Android
google protobuf 啊。json 太落伍了
|
24
durban126 2020-07-16 17:55:48 +08:00
重新发一个吧 标题跟内容都不符了
|