跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 正儿八经的问题,为什么网上的人说 json_encode 的效率比 serialize 高,而我自己测试则相反? PHP 数组保存在文件应该选择哪种方式比较好?
未分類
21 7 月 2020

正儿八经的问题,为什么网上的人说 json_encode 的效率比 serialize 高,而我自己测试则相反? PHP 数组保存在文件应该选择哪种方式比较好?

正儿八经的问题,为什么网上的人说 json_encode 的效率比 serialize 高,而我自己测试则相反? PHP 数组保存在文件应该选择哪种方式比较好?

資深大佬 : frozenway 5

我把一个 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 格式读取效率更快?

大佬有話說 (25)

  • 資深大佬 : emeab

    php5.3 后对 json 有优化 但是还是比 serialize 在数据量大的情况下 要慢

  • 資深大佬 : takemeaway

    不能说明。 你怎么不贴两个文件的大小?
    file_get_contents 占用了时间。

  • 主 資深大佬 : frozenway

    我这个是在 php7.1 环境下运行的

  • 資深大佬 : virusdefender

    serialize 注意安全问题

  • 主 資深大佬 : frozenway

    @takemeaway gdip.ser 文件 271K , gdip.json 文件 203K ,他们对应的 php 数组是同一个

  • 主 資深大佬 : frozenway

    @virusdefender 什么安全问题?

  • 資深大佬 : emeab

    @frozenway 用 json 只是很多情况是因为可移植性强 后期这个文件 可以用任何一个语言来读 用 serialize 就不可以

  • 資深大佬 : sockball07

    随便一搜就有相关文章嘛 https://segmentfault.com/a/1190000020755226

    总结是说 serialize 对中文,也就是多字节效率更高

    就记得 serialize 占的空间大一些…

  • 資深大佬 : takemeaway

    我测试是 json 的快,数据量比你小点。

    而且不要用 file 打开。直接变量写上试试。

  • 資深大佬 : MeteorCat

    我是默认选用 json,好处是具有通用性,以前项目从 php 用 java 重构之后读写数据库里面的 json 配置毫无压力

  • 資深大佬 : guanhui07

    json_encode 吧

  • 資深大佬 : jfcherng

    > 为什么网上的人说 json_encode 的效率比 serialize 高,而我自己测试则相反?

    可是你測試的是 json_decode

  • 資深大佬 : wangritian

    把读盘丢到循环外面再测测
    如果效率没有数量级的差距,推荐 json

  • 主 資深大佬 : frozenway

    @guanhui07 @jfcherng 这个题目应该改为 json_decode 和 unzerialize

  • 資深大佬 : webshe11

    搞安全的提一句,如果数据量不大,使用不频繁,还是用 json 吧,json 比较纯粹,没那么多么蛾子
    反序列化漏洞了解一下

  • 資深大佬 : lovecy

    你这个测试例子就很奇怪,file_get_contents 非要写在循环里面,并没有真正的测试单纯的 unseralize 和 json_decode 的性能

  • 資深大佬 : imdong

    曾经做过测试,忘记这两者那个效率高,但无论用那种方式,都比 return array 效率高处不止一个量级。

    然后最后还是选定了 seralize 保存。

    五年前版本,不代表现在情况。

    当时的需求是做垃圾站用的。

  • 資深大佬 : jfcherng

    拿 https://www.cc1021.com/article/212.html 的 script 測試

    “`
    [[email protected] 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

    [[email protected] Desktop]$ php8 test.php
    json : 190
    serialize : 257

    json_encode : 0.010500907897949
    json_decode : 0.046006202697754

    serialize : 0.014501810073853
    unserialize : 0.027003049850464
    “`

  • 資深大佬 : jfcherng

    encode 感覺差不多, decode 差異比較明顯

  • 資深大佬 : leon1900

    在我印象中一直是 serialize 效率高一点,json 通用性更强一点,不过这两个串化效率都不太行。
    之前看有个人分析过,在 70M 的数组以下 serialize 效率高,大数组 json_encode 效率更爱

  • 主 資深大佬 : frozenway

    @lovecy 写在里面是为了测 serialize 文件存储的大小比 json 的大的情况下,读取并反序列成数组的效率比 json 的如何,确保文件大小更大的情况下,依然读取更快

  • 資深大佬 : NerverLibis

    print_r 序列化 两件套,2020 年还有用 php 的吗

  • 資深大佬 : wnpllrzodiac

    google protobuf 啊。json 太落伍了

  • 資深大佬 : durban126

    重新发一个吧 标题跟内容都不符了

  • 主 資深大佬 : frozenway

    @durban126 不发了,下班走人

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具