Browse Source

Merge branch 'master' of github.com:sile/jsone

Takeru Ohta 8 years ago
parent
commit
c9fab3cade
2 changed files with 102 additions and 121 deletions
  1. 86 105
      BENCHMARK.md
  2. 16 16
      README.md

+ 86 - 105
BENCHMARK.md

@@ -26,7 +26,7 @@ $ git checkout 2.2.0
 ###
 ###
 ### Benchmark: Non HiPE
 ### Benchmark: Non HiPE
 ###
 ###
-$ patch -p1 < non_hipe.patch
+$ patch -p1 < jsone.patch
 $ mix deps.get
 $ mix deps.get
 $ MIX_ENV=bench mix compile
 $ MIX_ENV=bench mix compile
 $ MIX_ENV=bench mix bench
 $ MIX_ENV=bench mix bench
@@ -36,55 +36,54 @@ duration:      1.0 s
 Finished in 96.87 seconds
 Finished in 96.87 seconds
 
 
 ## EncoderBench
 ## EncoderBench
-structs (Poison)               500000   6.64 µs/op
-maps (jiffy)                   500000   7.30 µs/op
-maps (jsone)                   100000   11.51 µs/op
-maps (Poison)                  100000   13.46 µs/op
-structs (Jazz)                 100000   14.23 µs/op
-structs (JSX)                  100000   15.60 µs/op
-maps (Jazz)                    100000   19.79 µs/op
-maps (JSX)                     100000   28.94 µs/op
-strings (jiffy)                 20000   94.73 µs/op
-lists (Poison)                  20000   98.92 µs/op
-string escaping (jiffy)         10000   149.25 µs/op
-lists (jsone)                   10000   153.25 µs/op
-lists (Jazz)                    10000   201.31 µs/op
-lists (jiffy)                   10000   209.62 µs/op
-strings (JSX)                   10000   267.73 µs/op
-lists (JSX)                      5000   335.35 µs/op
-strings (Jazz)                   5000   404.81 µs/op
-strings (Poison)                 5000   410.55 µs/op
-jiffy (pretty)                   5000   430.67 µs/op
-jiffy                            5000   497.42 µs/op
-strings (jsone)                  5000   545.25 µs/op
-string escaping (jsone)          2000   697.40 µs/op
-string escaping (Jazz)           1000   1162.74 µs/op
-string escaping (JSX)            1000   1322.45 µs/op
-string escaping (Poison)         1000   1352.44 µs/op
-Poison                           1000   1438.31 µs/op
-Poison (pretty)                  1000   1477.34 µs/op
-jsone                            1000   1508.22 µs/op
-Jazz                             1000   1806.94 µs/op
-jsone (pretty)                   1000   2024.11 µs/op
-JSX                              1000   2068.95 µs/op
-Jazz (pretty)                    1000   2110.42 µs/op
-JSX (pretty)                      500   5516.55 µs/op
+structs (Poison)               500000   6.51 µs/op
+maps (jiffy)                   500000   7.23 µs/op
+maps (jsone)                   100000   10.64 µs/op
+maps (Poison)                  100000   13.58 µs/op
+structs (Jazz)                 100000   13.96 µs/op
+structs (JSX)                  100000   15.78 µs/op
+maps (Jazz)                    100000   19.30 µs/op
+maps (JSX)                      50000   29.28 µs/op
+strings (jiffy)                 20000   98.80 µs/op
+lists (Poison)                  10000   109.30 µs/op
+string escaping (jiffy)         10000   144.01 µs/op
+lists (jsone)                   10000   157.39 µs/op
+lists (Jazz)                    10000   201.82 µs/op
+lists (jiffy)                   10000   210.40 µs/op
+strings (JSX)                   10000   262.18 µs/op
+lists (JSX)                      5000   357.25 µs/op
+strings (Jazz)                   5000   399.89 µs/op
+jiffy                            5000   408.03 µs/op
+strings (Poison)                 5000   416.78 µs/op
+jiffy (pretty)                   5000   420.94 µs/op
+strings (jsone)                  5000   595.63 µs/op
+string escaping (jsone)          2000   732.44 µs/op
+string escaping (Jazz)           1000   1197.06 µs/op
+string escaping (Poison)         1000   1318.82 µs/op
+string escaping (JSX)            1000   1324.04 µs/op
+Poison                           1000   1447.71 µs/op
+Poison (pretty)                  1000   1534.74 µs/op
+jsone                            1000   1556.85 µs/op
+jsone (pretty)                   1000   1686.55 µs/op
+Jazz                             1000   1824.05 µs/op
+Jazz (pretty)                    1000   2041.22 µs/op
+JSX                              1000   2184.59 µs/op
+JSX (pretty)                      500   5533.04 µs/op
 
 
 ## ParserBench
 ## ParserBench
-UTF-8 unescaping (jiffy)        50000   63.49 µs/op
-UTF-8 unescaping (Poison)       10000   258.79 µs/op
-UTF-8 unescaping (JSX)          10000   279.01 µs/op
-UTF-8 unescaping (jsone)         5000   364.77 µs/op
-jiffy                            2000   588.38 µs/op
-jsone                            1000   1471.44 µs/op
-Poison                           1000   1495.67 µs/op
-JSX                              1000   1855.33 µs/op
+UTF-8 unescaping (jiffy)        50000   63.01 µs/op
+UTF-8 unescaping (Poison)       10000   249.70 µs/op
+UTF-8 unescaping (JSX)          10000   281.84 µs/op
+UTF-8 unescaping (jsone)         5000   399.38 µs/op
+jiffy                            5000   544.84 µs/op
+jsone                            1000   1364.38 µs/op
+Poison                           1000   1401.35 µs/op
+JSX                              1000   1844.55 µs/op
 
 
 
 
 ###
 ###
 ### Benchmark: HiPE
 ### Benchmark: HiPE
 ###
 ###
-$ patch -p1 < hipe.patch
 $ mix clean --deps && find . -name '*.beam' | xargs rm
 $ mix clean --deps && find . -name '*.beam' | xargs rm
 $ ERL_COMPILER_OPTIONS="native" MIX_ENV=bench mix compile
 $ ERL_COMPILER_OPTIONS="native" MIX_ENV=bench mix compile
 $ MIX_ENV=bench mix bench
 $ MIX_ENV=bench mix bench
@@ -94,49 +93,49 @@ duration:      1.0 s
 Finished in 102.75 seconds
 Finished in 102.75 seconds
 
 
 ## EncoderBench
 ## EncoderBench
-maps (jsone)                   500000   6.40 µs/op
-structs (Poison)               500000   6.66 µs/op
-maps (jiffy)                   500000   7.46 µs/op
-maps (Poison)                  100000   11.98 µs/op
-structs (JSX)                  100000   13.05 µs/op
-structs (Jazz)                 100000   15.43 µs/op
-maps (Jazz)                    100000   22.37 µs/op
-maps (JSX)                     100000   27.30 µs/op
-lists (jsone)                   50000   68.52 µs/op
-lists (Poison)                  20000   79.27 µs/op
-strings (jiffy)                 20000   98.95 µs/op
-strings (Poison)                10000   142.03 µs/op
-string escaping (jiffy)         10000   149.08 µs/op
-strings (JSX)                   10000   185.93 µs/op
-lists (jiffy)                   10000   206.95 µs/op
-lists (Jazz)                    10000   228.95 µs/op
-lists (JSX)                     10000   274.25 µs/op
-strings (Jazz)                   5000   312.56 µs/op
-string escaping (jsone)          5000   343.38 µs/op
-strings (jsone)                  5000   355.18 µs/op
-jiffy                            5000   404.91 µs/op
-jiffy (pretty)                   5000   411.19 µs/op
-string escaping (JSX)            2000   739.83 µs/op
-Poison                           2000   783.98 µs/op
-Poison (pretty)                  2000   833.02 µs/op
-jsone                            2000   945.08 µs/op
-string escaping (Poison)         1000   1263.35 µs/op
-string escaping (Jazz)           1000   1292.65 µs/op
-jsone (pretty)                   1000   1359.26 µs/op
-Jazz                             1000   1635.89 µs/op
-JSX                              1000   1718.37 µs/op
-Jazz (pretty)                    1000   1841.45 µs/op
-JSX (pretty)                      500   4709.19 µs/op
+maps (jsone)                   500000   6.12 µs/op
+structs (Poison)               500000   6.49 µs/op
+maps (jiffy)                   500000   7.69 µs/op
+maps (Poison)                  100000   12.32 µs/op
+structs (JSX)                  100000   13.51 µs/op
+structs (Jazz)                 100000   15.06 µs/op
+maps (Jazz)                    100000   22.90 µs/op
+maps (JSX)                     100000   27.03 µs/op
+lists (jsone)                   50000   69.93 µs/op
+lists (Poison)                  20000   79.04 µs/op
+strings (jiffy)                 20000   96.67 µs/op
+strings (Poison)                10000   142.43 µs/op
+string escaping (jiffy)         10000   146.85 µs/op
+strings (JSX)                   10000   179.96 µs/op
+lists (jiffy)                   10000   207.75 µs/op
+lists (Jazz)                    10000   229.95 µs/op
+lists (JSX)                     10000   278.01 µs/op
+strings (Jazz)                   5000   310.10 µs/op
+string escaping (jsone)          5000   317.10 µs/op
+strings (jsone)                  5000   321.69 µs/op
+jiffy                            5000   409.73 µs/op
+jiffy (pretty)                   5000   419.55 µs/op
+jsone                            5000   664.34 µs/op
+jsone (pretty)                   5000   724.28 µs/op
+string escaping (JSX)            2000   767.67 µs/op
+Poison                           2000   806.24 µs/op
+Poison (pretty)                  2000   844.76 µs/op
+string escaping (Poison)         1000   1277.54 µs/op
+string escaping (Jazz)           1000   1311.85 µs/op
+Jazz                             1000   1630.21 µs/op
+JSX                              1000   1777.62 µs/op
+Jazz (pretty)                    1000   1888.71 µs/op
+JSX (pretty)                      500   4872.34 µs/op
 
 
 ## ParserBench
 ## ParserBench
-UTF-8 unescaping (jiffy)        50000   62.64 µs/op
-UTF-8 unescaping (jsone)        20000   90.13 µs/op
-UTF-8 unescaping (Poison)       10000   119.44 µs/op
-UTF-8 unescaping (JSX)          10000   168.10 µs/op
-jsone                            5000   542.69 µs/op
-jiffy                            5000   543.75 µs/op
-Poison                           5000   733.23 µs/op
-JSX                              1000   1389.98 µs/op
+UTF-8 unescaping (jiffy)        50000   62.42 µs/op
+UTF-8 unescaping (jsone)        20000   92.63 µs/op
+UTF-8 unescaping (Poison)       10000   118.97 µs/op
+UTF-8 unescaping (JSX)          10000   172.07 µs/op
+jiffy                            5000   542.77 µs/op
+jsone                            5000   561.15 µs/op
+Poison                           5000   751.36 µs/op
+JSX                              1000   1435.10 µs/op
 ```
 ```
 
 
 Libraries Version
 Libraries Version
@@ -150,14 +149,14 @@ mix.lock:
   "exjsx": {:git, "https://github.com/talentdeficit/exjsx.git", "202b2ee1b274511973de60e9fdfed218d3b5eecc", []},
   "exjsx": {:git, "https://github.com/talentdeficit/exjsx.git", "202b2ee1b274511973de60e9fdfed218d3b5eecc", []},
   "jazz": {:git, "https://github.com/meh/jazz.git", "49f335492aca5516495199dd81dd18b845ebaa69", []},
   "jazz": {:git, "https://github.com/meh/jazz.git", "49f335492aca5516495199dd81dd18b845ebaa69", []},
   "jiffy": {:git, "https://github.com/davisp/jiffy.git", "330f41c486cf949707eb494b855634df324a6d92", []},
   "jiffy": {:git, "https://github.com/davisp/jiffy.git", "330f41c486cf949707eb494b855634df324a6d92", []},
-  "jsone": {:hex, :jsone, "1.2.4"},
+  "jsone": {:hex, :jsone, "1.2.6"},
   "jsx": {:hex, :jsx, "2.6.2"}}
   "jsx": {:hex, :jsx, "2.6.2"}}
 ```
 ```
 
 
 Patches
 Patches
 -------
 -------
 
 
-non_hipe.patch:
+jsone.patch:
 ```patch
 ```patch
 diff --git a/bench/encoder_bench.exs b/bench/encoder_bench.exs
 diff --git a/bench/encoder_bench.exs b/bench/encoder_bench.exs
 index cf40dcd..3453a2d 100644
 index cf40dcd..3453a2d 100644
@@ -277,26 +276,8 @@ index 89a8c10..ac2f53e 100644
      [{:earmark, "~> 0.2", only: :docs},
      [{:earmark, "~> 0.2", only: :docs},
       {:ex_doc, "~> 0.11", only: :docs},
       {:ex_doc, "~> 0.11", only: :docs},
       {:benchfella, "~> 0.3", only: :bench},
       {:benchfella, "~> 0.3", only: :bench},
-+     {:jsone, "~> 1.2.4", only: :bench},
++     {:jsone, "~> 1.2.6", only: :bench},
       {:jiffy, github: "davisp/jiffy", only: :bench},
       {:jiffy, github: "davisp/jiffy", only: :bench},
       {:exjsx, github: "talentdeficit/exjsx", only: :bench},
       {:exjsx, github: "talentdeficit/exjsx", only: :bench},
       {:jazz, github: "meh/jazz", only: :bench}]
       {:jazz, github: "meh/jazz", only: :bench}]
 ```
 ```
-
-hipe.patch:
-```patch
-diff --git a/config/config.exs b/config/config.exs
-index 013831e..1240a78 100644
---- a/config/config.exs
-+++ b/config/config.exs
-@@ -15,8 +15,7 @@ use Mix.Config
-#       format: "$time $metadata[$level] $message\n"
-
-config :poison,
--#  native: :erlang.system_info(:hipe_architecture) != :undefined
--  native: false
-+  native: :erlang.system_info(:hipe_architecture) != :undefined
-
-# It is also possible to import configuration files, relative to this
-# directory. For example, you can emulate configuration per environment
-```

+ 16 - 16
README.md

@@ -207,24 +207,24 @@ __Non HiPE__:
 
 
 |                  | jiffy        | jsone             | poison        | jazz          | jsx           |
 |                  | jiffy        | jsone             | poison        | jazz          | jsx           |
 |:-----------------|-------------:|------------------:|--------------:|--------------:|--------------:|
 |:-----------------|-------------:|------------------:|--------------:|--------------:|--------------:|
-| maps             |   7.35 μs/op |   10.00 μs/op (2) |   13.26 μs/op |   18.97 μs/op |   30.03 μs/op |
-| lists            | 214.93 μs/op |  151.70 μs/op (2) |  114.34 μs/op |  197.31 μs/op |  337.25 μs/op |
-| strings*         | 103.77 μs/op |  550.78 μs/op (5) |  350.49 μs/op |  445.60 μs/op |  237.08 μs/op |
-| string escaping* | 141.46 μs/op |  934.83 μs/op (2) | 1387.10 μs/op | 1568.84 μs/op | 1371.11 μs/op |
-| large value**    | 404.95 μs/op | 1379.04 μs/op (3) | 1322.36 μs/op | 1818.49 μs/op | 2027.41 μs/op |
-| pretty print**   | 415.19 μs/op | 1734.20 μs/op (3) | 1453.36 μs/op | 2031.73 μs/op | 5223.72 μs/op |
+| maps             |   7.23 μs/op |   10.64 μs/op (2) |   13.58 μs/op |   19.30 μs/op |   29.28 μs/op |
+| lists            | 210.40 μs/op |  157.39 μs/op (2) |  109.30 μs/op |  201.82 μs/op |  357.25 μs/op |
+| strings*         |  98.80 μs/op |  595.63 μs/op (5) |  416.78 μs/op |  399.89 μs/op |  262.18 μs/op |
+| string escaping* | 144.01 μs/op |  732.44 μs/op (2) | 1318.82 μs/op | 1197.06 μs/op | 1324.04 μs/op |
+| large value**    | 408.03 μs/op | 1556.85 μs/op (3) | 1447.71 μs/op | 1824.05 μs/op | 2184.59 μs/op |
+| pretty print**   | 420.94 μs/op | 1686.55 μs/op (3) | 1534.74 μs/op | 2041.22 μs/op | 5533.04 μs/op |
 
 
 
 
 __HiPE__:
 __HiPE__:
 
 
 |                  | jiffy        | jsone             | poison        | jazz          | jsx           |
 |                  | jiffy        | jsone             | poison        | jazz          | jsx           |
 |:-----------------|-------------:|------------------:|--------------:|--------------:|--------------:|
 |:-----------------|-------------:|------------------:|--------------:|--------------:|--------------:|
-| maps             |   7.12 μs/op |    5.58 μs/op (1) |   10.71 μs/op |   21.08 μs/op |   25.38 μs/op |
-| lists            | 198.89 μs/op |   64.76 μs/op (1) |   76.80 μs/op |  217.64 μs/op |  220.85 μs/op |
-| strings*         | 109.11 μs/op |  323.63 μs/op (4) |  140.58 μs/op |  363.87 μs/op |  179.35 μs/op |
-| string escaping* | 140.35 μs/op |  481.52 μs/op (2) | 1222.81 μs/op | 1312.68 μs/op |  699.05 μs/op |
-| large value**    | 388.06 μs/op |  634.06 μs/op (2) |  744.13 μs/op | 1572.41 μs/op | 1667.37 μs/op |
-| pretty print**   | 404.84 μs/op |  956.29 μs/op (3) |  802.29 μs/op | 1795.51 μs/op | 4434.13 μs/op |
+| maps             |   7.69 μs/op |    6.12 μs/op (1) |   12.32 μs/op |   22.90 μs/op |   27.03 μs/op |
+| lists            | 207.75 μs/op |   69.93 μs/op (1) |   79.04 μs/op |  229.95 μs/op |  278.01 μs/op |
+| strings*         |  96.67 μs/op |  321.69 μs/op (5) |  142.43 μs/op |  310.10 μs/op |  179.96 μs/op |
+| string escaping* | 146.85 μs/op |  317.10 μs/op (2) | 1277.54 μs/op | 1311.85 μs/op |  767.67 μs/op |
+| large value**    | 409.73 μs/op |  664.34 μs/op (2) |  806.24 μs/op | 1630.21 μs/op | 1777.62 μs/op |
+| pretty print**   | 419.55 μs/op |  724.28 μs/op (2) |  844.76 μs/op | 1888.71 μs/op | 4872.34 μs/op |
 
 
 \* binary representation of [UTF-8-demo.txt](https://github.com/devinus/poison/blob/2.1.0/bench/data/UTF-8-demo.txt)  <br />
 \* binary representation of [UTF-8-demo.txt](https://github.com/devinus/poison/blob/2.1.0/bench/data/UTF-8-demo.txt)  <br />
 \** [generated.json](https://github.com/devinus/poison/blob/2.1.0/bench/data/generated.json)
 \** [generated.json](https://github.com/devinus/poison/blob/2.1.0/bench/data/generated.json)
@@ -235,16 +235,16 @@ __Non HiPE__:
 
 
 |                    | jiffy        | jsone             | poison        | jsx           |
 |                    | jiffy        | jsone             | poison        | jsx           |
 |:-------------------|-------------:|------------------:|--------------:|--------------:|
 |:-------------------|-------------:|------------------:|--------------:|--------------:|
-| json value*        | 522.25 μs/op | 1217.44 μs/op (2) | 1223.37 μs/op | 1630.77 μs/op |
-| UTF-8 unescaping** |  59.63 μs/op |  342.50 μs/op (4) |  219.79 μs/op |  243.64 μs/op |
+| json value*        | 544.84 μs/op | 1364.38 μs/op (2) | 1401.35 μs/op | 1844.55 μs/op |
+| UTF-8 unescaping** |  63.01 μs/op |  399.38 μs/op (4) |  249.70 μs/op |  281.84 μs/op |
 
 
 
 
 __HiPE__:
 __HiPE__:
 
 
 |                    | jiffy        | jsone             | poison        | jsx           |
 |                    | jiffy        | jsone             | poison        | jsx           |
 |:-------------------|-------------:|------------------:|--------------:|--------------:|
 |:-------------------|-------------:|------------------:|--------------:|--------------:|
-| json value*        | 504.77 μs/op |  527.77 μs/op (2) |  686.90 μs/op | 1320.74 μs/op |
-| UTF-8 unescaping** |  59.95 μs/op |   83.79 μs/op (2) |  109.70 μs/op |  159.35 μs/op |
+| json value*        | 542.77 μs/op |  561.15 μs/op (2) |  751.36 μs/op | 1435.10 μs/op |
+| UTF-8 unescaping** |  62.42 μs/op |   92.63 μs/op (2) |  118.97 μs/op |  172.07 μs/op |
 
 
 \* [generated.json](https://github.com/devinus/poison/blob/2.1.0/bench/data/generated.json) <br />
 \* [generated.json](https://github.com/devinus/poison/blob/2.1.0/bench/data/generated.json) <br />
 \** [UTF-8-demo.txt](https://github.com/devinus/poison/blob/2.1.0/bench/data/UTF-8-demo.txt)
 \** [UTF-8-demo.txt](https://github.com/devinus/poison/blob/2.1.0/bench/data/UTF-8-demo.txt)