README 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. UltraJSON is a fast and extendable JSON encoder and decoder written in pure C
  2. Python bindings are available as the module ujson (through easy_install / pypi):
  3. http://pypi.python.org/pypi/ujson/
  4. Installation instructions:
  5. 1. Build and install ujson Python extension (requires root)
  6. Go to <root>/python
  7. Type: python setup.py build install
  8. 2. Run tests (as needed)
  9. Type: python tests.py
  10. Same instructions applies for Windows except that step 1) isn't necessary since
  11. a prebuilt static library is included.
  12. Preliminary benchmarks:
  13. 64-bit benchmarks Linux
  14. Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
  15. OS Version: Ubuntu 10.10
  16. System Type: x64-based PC
  17. Processor: Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz
  18. Total Physical Memory: 4096 MB
  19. Array with 256 utf-8 strings:
  20. ujson encode : 2714.66499 calls/sec
  21. simplejson encode : 1542.63718 calls/sec
  22. cjson encode : 132.23604 calls/sec
  23. ujson decode : 2079.17287 calls/sec
  24. cjson decode : 992.21602 calls/sec
  25. simplejson decode : 278.92061 calls/sec
  26. Medium complex object:
  27. ujson encode : 17849.80356 calls/sec
  28. simplejson encode : 3524.32372 calls/sec
  29. cjson encode : 2967.34656 calls/sec
  30. ujson decode : 11685.87610 calls/sec
  31. cjson decode : 8206.67906 calls/sec
  32. simplejson decode : 6549.99750 calls/sec
  33. Array with 256 strings:
  34. ujson encode : 38543.50303 calls/sec
  35. simplejson encode : 19436.45772 calls/sec
  36. cjson encode : 12392.55614 calls/sec
  37. ujson decode : 27207.33157 calls/sec
  38. cjson decode : 30237.60827 calls/sec
  39. simplejson decode : 25271.93073 calls/sec
  40. Array with 256 doubles:
  41. ujson encode : 6027.45931 calls/sec
  42. simplejson encode : 2915.54871 calls/sec
  43. cjson encode : 3546.88804 calls/sec
  44. ujson decode : 28045.13375 calls/sec
  45. cjson decode : 15066.73209 calls/sec
  46. simplejson decode : 15604.98222 calls/sec
  47. Array with 256 True values:
  48. ujson encode : 187342.39634 calls/sec
  49. simplejson encode : 48972.93887 calls/sec
  50. cjson encode : 67274.93082 calls/sec
  51. ujson decode : 158103.79663 calls/sec
  52. cjson decode : 83237.88990 calls/sec
  53. simplejson decode : 115645.98241 calls/sec
  54. Array with 256 dict{string, int} pairs:
  55. ujson encode : 25301.85690 calls/sec
  56. simplejson encode : 5734.29472 calls/sec
  57. cjson encode : 4447.73411 calls/sec
  58. ujson decode : 16290.72288 calls/sec
  59. cjson decode : 12528.56060 calls/sec
  60. simplejson decode : 10394.23358 calls/sec
  61. Dict with 256 arrays with 256 dict{string, int} pairs:
  62. ujson encode : 87.40865 calls/sec
  63. simplejson encode : 17.07889 calls/sec
  64. cjson encode : 17.25164 calls/sec
  65. ujson decode : 45.94026 calls/sec
  66. cjson decode : 34.60225 calls/sec
  67. simplejson decode : 26.92238 calls/sec
  68. 32-bit benchmarks Windows
  69. Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
  70. OS Version: 6.1.7601 Service Pack 1 Build 7601
  71. System Type: x64-based PC
  72. Processor: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz 2.83 GHz
  73. Total Physical Memory: 8191 MB
  74. Array with 256 utf-8 strings:
  75. ujson encode : 1191.98175 calls/sec
  76. simplejson encode : 1013.98279 calls/sec
  77. cjson encode : 1040.66063 calls/sec
  78. ujson decode : 1215.66875 calls/sec
  79. cjson decode : 493.30484 calls/sec
  80. simplejson decode : 269.85512 calls/sec
  81. Medium complex object:
  82. ujson encode : 10307.63723 calls/sec
  83. simplejson encode : 2534.94769 calls/sec
  84. cjson encode : 2047.95118 calls/sec
  85. ujson decode : 7274.10026 calls/sec
  86. cjson decode : 3575.39307 calls/sec
  87. simplejson decode : 3565.51252 calls/sec
  88. Array with 256 strings:
  89. ujson encode : 21348.25210 calls/sec
  90. simplejson encode : 15736.74638 calls/sec
  91. cjson encode : 6371.26334 calls/sec
  92. ujson decode : 26050.25316 calls/sec
  93. cjson decode : 16468.88215 calls/sec
  94. simplejson decode : 21115.75770 calls/sec
  95. Array with 256 doubles:
  96. ujson encode : 26975.49110 calls/sec
  97. simplejson encode : 2046.29746 calls/sec
  98. cjson encode : 2133.56594 calls/sec
  99. ujson decode : 28430.33722 calls/sec
  100. cjson decode : 4114.36400 calls/sec
  101. simplejson decode : 4419.08507 calls/sec
  102. Array with 256 True values:
  103. ujson encode : 89846.12897 calls/sec
  104. simplejson encode : 34288.36862 calls/sec
  105. cjson encode : 47168.35849 calls/sec
  106. ujson decode : 99423.47549 calls/sec
  107. cjson decode : 58795.91460 calls/sec
  108. simplejson decode : 76296.14699 calls/sec
  109. Array with 256 dict{string, int} pairs:
  110. ujson encode : 14776.41614 calls/sec
  111. simplejson encode : 3876.86634 calls/sec
  112. cjson encode : 3050.65343 calls/sec
  113. ujson decode : 12934.39432 calls/sec
  114. cjson decode : 7993.04345 calls/sec
  115. simplejson decode : 7152.09475 calls/sec
  116. Here is the benchmark run from a 32bit CentOS 5.6 (Python 2.4) machine:
  117. Array with 256 utf-8 strings:
  118. ujson encode : 1453.30891 calls/sec
  119. simplejson encode : 658.31181 calls/sec
  120. cjson encode : 62.18416 calls/sec
  121. ujson decode : 1016.58767 calls/sec
  122. cjson decode : 455.28550 calls/sec
  123. simplejson decode : 124.20439 calls/sec
  124. Medium complex object:
  125. ujson encode : 6010.21634 calls/sec
  126. simplejson encode : 1418.77823 calls/sec
  127. cjson encode : 1252.92530 calls/sec
  128. ujson decode : 4637.52630 calls/sec
  129. cjson decode : 3444.13604 calls/sec
  130. simplejson decode : 2166.18641 calls/sec
  131. Array with 256 strings:
  132. ujson encode : 12252.28889 calls/sec
  133. simplejson encode : 9351.67532 calls/sec
  134. cjson encode : 7786.13697 calls/sec
  135. ujson decode : 10951.17394 calls/sec
  136. cjson decode : 15971.02425 calls/sec
  137. simplejson decode : 6796.77480 calls/sec
  138. Array with 256 doubles:
  139. ujson encode : 16300.61218 calls/sec
  140. simplejson encode : 1613.39428 calls/sec
  141. cjson encode : 2035.58937 calls/sec
  142. ujson decode : 17301.00746 calls/sec
  143. cjson decode : 5785.33627 calls/sec
  144. simplejson decode : 6199.49364 calls/sec
  145. Array with 256 True values:
  146. ujson encode : 72618.15350 calls/sec
  147. simplejson encode : 18707.57593 calls/sec
  148. cjson encode : 24150.26201 calls/sec
  149. ujson decode : 53650.94162 calls/sec
  150. cjson decode : 48069.53050 calls/sec
  151. simplejson decode : 47098.40293 calls/sec
  152. Array with 256 dict{string, int} pairs:
  153. ujson encode : 8811.85922 calls/sec
  154. simplejson encode : 2756.91262 calls/sec
  155. cjson encode : 1758.26962 calls/sec
  156. ujson decode : 6490.36358 calls/sec
  157. cjson decode : 6330.77263 calls/sec
  158. simplejson decode : 4161.97048 calls/sec
  159. Dict with 256 arrays with 256 dict{string, int} pairs:
  160. ujson encode : 31.08834 calls/sec
  161. simplejson encode : 10.41434 calls/sec
  162. cjson encode : 6.93790 calls/sec
  163. ujson decode : 19.81373 calls/sec
  164. cjson decode : 20.31727 calls/sec
  165. simplejson decode : 15.05690 calls/sec
  166. See (python/benchmark.py) for further information.
  167. NOTE: These benchmarks are preliminary!