and*_*ber 28 php arrays performance object
众所周知,json_decode您可以选择返回关联数组或对象.在许多其他情况下我们也有两种选择.显然,在某些情况下,根据您正在处理的数据类型(一个项目与项目列表相关的一组数据),使用一个或另一个更"合适".
我想知道的是,在内存,速度等方面,使用一方与另一方的效率有什么不同?我对一个非常大的对象的访问时间特别感兴趣 - 这与一个非常大的数组相比如何?为什么?
对不起,如果之前已经讨论过这个问 我正在写一个基准,可能会告诉我哪一个更好,但不会帮助我理解原因.
Fil*_*efp 46
许多程序员更喜欢使用json_decodetrue作为第二个参数,因为返回的assoc数组与你在javascript中处理对象的方式非常相似.
返回一个正确的对象将需要阅读有关如何使用和不使用的对象,并且因为大多数程序员都非常熟悉更优先的关联数组,特别是如果代码将由开发人员团队维护.代码应易于理解.
关于性能方面的问题我不认为你需要担心,因为大多数(所有)案例中的瓶颈都在其他地方.除非你正在解析一个巨大的字符串,并且我的意思是真的很大,你不应该做任何基准测试.我相信返回一个关联数组与一个合适的对象之间的区别将是次要的.
我在这里发现了一个相当大的json字符串并进行了一些调整以使其更大,最终大小为84 578字节.
然后,我使用两个备选方案(关联数组与对象)解析字符串各1 000次,然后我运行测试三次.结果如下:
第一轮
JSON object exec: 4.06122 s
JSON assoc exec: 3.28679 s
-------------------------------------
assoc is faster by 19.07%
Run Code Online (Sandbox Code Playgroud)
第二轮
JSON object exec: 4.09614 s
JSON assoc exec: 3.29216 s
-------------------------------------
assoc is faster by 19.63%
Run Code Online (Sandbox Code Playgroud)
第3次运行
JSON object exec: 4.08762 s
JSON assoc exec: 3.29960 s
-------------------------------------
assoc is faster by 19.28%
Run Code Online (Sandbox Code Playgroud)
这个基准测试用于显示哪个stdObject和哪个Array()更快,我使用的解析修改过的json文件(更大的一个)比以前的基准测试更好.
每次读/写测试运行100000次(即,下面给出的代码执行了很多次).
json_decode($ json_data)
for ($i =0; $i < 24; ++$i){
$a = $object[$i]->user->profile_sidebar_border_color . "stackoverflow";
$object[$i]->nested->entities->user_mentions[0]->indices[$i&1] += 1;
}
Run Code Online (Sandbox Code Playgroud)
json_decode($ json_data,true)
for ($i =0; $i < 24; ++$i){
$a = $assoc[$i]['user']['profile_sidebar_border_color'] . "stackoverflow";
$assoc[$i]['nested']['entities']['user_mentions'][0]['indices'][$i&1] += 1;
}
Run Code Online (Sandbox Code Playgroud)
第一轮
JSON object read/write: 3.05421 s
JSON assoc read/write: 2.51932 s
-------------------------------------
assoc is faster by 17.51%
Run Code Online (Sandbox Code Playgroud)
第二轮
JSON object read/write: 3.06307 s
JSON assoc read/write: 2.52701 s
-------------------------------------
assoc is faster by 17.50%
Run Code Online (Sandbox Code Playgroud)
第3次运行
JSON object read/write: 3.06109 s
JSON assoc read/write: 2.52248 s
-------------------------------------
assoc is faster by 17.60%
Run Code Online (Sandbox Code Playgroud)
PHP版本
PHP 5.3.6(cli)(建于2011年8月13日19:04:57)版权所有(c)1997-2011
PHP Group Zend Engine v2.3.0,版权所有(c)1998-2011 Zend
技术
| 归档时间: |
|
| 查看次数: |
6977 次 |
| 最近记录: |