Python 的极速 JSON 编解码器
不是逐句翻译,如有困惑,参见原文: Ultra fast JSON encoder and decoder for Python
Python中我们大量使用 JSON,Python 2.6 自带的那个太慢,所以我们后来使用 simplejson。今时今日 JavaScript 和 JSON 更广泛地使用了,所以我觉得可能这是一个值得我用 C 去优化的领域,而且也可以正明我宝刀未老。
UltraJSON
我花了一个周末来研究一下 JSON 编码,并把我结果称为 UltraJSON,从目前我做的初步的基准测试来看,他是我能找到的所有 JSON 编解码器中最快的(如果不是,那我可以把它优化得更快)。
Python 绑定
其实 UltraJSON 并非只能用于特定语言,只是为了方便我的同事使用,我就实现了它的 Python 绑定,称为 ujson 模块。
更新:UltraJSON 现在可以在 PyPI 中找到了,包名叫 ujson,用 easy_install 或 pip 可以很方便地安装它,你懂的。
easy_install ujson 或 pip install ujson
当前基准测试
64位 Linux 基准测试
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
OS Version: Ubuntu 10.10
System Type: x64-based PC
Processor: Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz
Total Physical Memory: 4096 MB
Benchmarks
UltraJSON calls/sec compared to three other popular JSON parsers with performance gain specified below each.
Test machine:
Linux version 2.6.32-131.0.15.el6.x86_64
Versions:
- ujson: 1.21
- simplejson: 2.6.2
- cjson: 1.05
- yajl: 0.3.5
- Python: Python 2.6.6 (r266:84292, Jul 20 2011, 10:22:43)
ujson | simplejson | cjson | yajl | |
---|---|---|---|---|
Array with 256 utf-8 strings | ||||
Encode | 4090,74 | 899,39 | 83,86 | 3189,86 |
4,55 | 48,78 | 1,28 | ||
Decode | 863,29 | 586,15 | 201,61 | 352,48 |
1,47 | 4,28 | 2,45 | ||
Medium complex object | ||||
Encode | 9750,37 | 1377,15 | 1512,06 | 3341,91 |
7,08 | 6,45 | 2,92 | ||
Decode | 5576,75 | 4247,16 | 3587,83 | 2850,13 |
1,31 | 1,55 | 1,96 | ||
Array with 256 strings | ||||
Encode | 17998,01 | 12954,46 | 8715,02 | 15924,35 |
1,39 | 2,07 | 1,13 | ||
Decode | 14540,71 | 19696,13 | 14908,46 | 9547,14 |
0,74 | 0,98 | 1,52 | ||
Array with 256 doubles | ||||
Encode | 2185,20 | 1466,87 | 1956,99 | 3421,10 |
1,49 | 1,12 | 0,64 | ||
Decode | 16062,01 | 8990,50 | 9743,40 | 8331,74 |
1,79 | 1,65 | 1,93 | ||
Array with 256 True values | ||||
Encode | 69767,60 | 25202,56 | 41145,99 | 64330,76 |
2,77 | 1,70 | 1,08 | ||
Decode | 91416,02 | 56439,97 | 54918,09 | 42786,02 |
1,62 | 1,66 | 2,14 | ||
Array with 256 dict{string, int} pairs | ||||
Encode | 11307,54 | 1830,45 | 2720,90 | 7725,56 |
6,18 | 4,16 | 1,46 | ||
Decode | 8695,94 | 7572,89 | 6076,71 | 5231,32 |
1,15 | 1,43 | 1,66 | ||
Dict with 256 arrays with 256 dict | ||||
Encode | 37,76 | 4,88 | 10,49 | 27,62 |
7,74 | 3,60 | 1,37 | ||
Decode | 17,70 | 15,56 | 11,25 | 12,00 |
1,14 | 1,57 | 1,47 |
More on GitHub
很期待看到有人使用这个项目,更赞的是贡献代码,所以来我的 GitHub 仓库(https://github.com/esnme/ultrajson)看看吧。
你要是把它绑定到更多语言就真的是酷毙了!
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2014-06-09 20:48:52
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!