From 5d4903c2376c02f1f1f8167261a109ccb035a1e7 Mon Sep 17 00:00:00 2001 From: giiita Date: Mon, 4 Oct 2021 08:51:48 +0900 Subject: [PATCH 1/3] Update refuel-json to v2.0.0 Drop sphere json --- README.md | 209 ++++++++++---------- build.sbt | 3 +- src/main/scala/jsonperf/BigJsonTest.scala | 14 +- src/main/scala/jsonperf/JmhBenchmarks.scala | 3 - src/main/scala/jsonperf/JsonTest.scala | 20 +- src/test/scala/jsonperf/UnitTest.scala | 2 +- 6 files changed, 110 insertions(+), 141 deletions(-) diff --git a/README.md b/README.md index e32f62e..93a6d46 100644 --- a/README.md +++ b/README.md @@ -41,19 +41,19 @@ Clone the project and start `sbt`. ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkDeserialize.runJson4sNative avgt 10 1,262 ± 0,011 ms/op -BigJsonBenchmarkDeserialize.runJson4sJackson avgt 10 1,101 ± 0,013 ms/op -BigJsonBenchmarkDeserialize.runArgonautJson avgt 10 0,783 ± 0,018 ms/op -BigJsonBenchmarkDeserialize.runPlayJson avgt 10 0,608 ± 0,011 ms/op -BigJsonBenchmarkDeserialize.runSprayJson avgt 10 0,399 ± 0,011 ms/op -BigJsonBenchmarkDeserialize.runRefuelParsing avgt 10 0,383 ± 0,007 ms/op -BigJsonBenchmarkDeserialize.runCirce avgt 10 0,373 ± 0,008 ms/op -BigJsonBenchmarkDeserialize.runUPickle avgt 10 0,335 ± 0,003 ms/op -BigJsonBenchmarkDeserialize.runSphereJson avgt 10 0,316 ± 0,008 ms/op -BigJsonBenchmarkDeserialize.runWeePickle avgt 10 0,218 ± 0,001 ms/op -BigJsonBenchmarkDeserialize.runJacksonParsing avgt 10 0,186 ± 0,001 ms/op -BigJsonBenchmarkDeserialize.runBorer avgt 10 0,156 ± 0,003 ms/op -BigJsonBenchmarkDeserialize.runJsoniter avgt 10 0,078 ± 0,001 ms/op +BigJsonBenchmarkDeserialize.runJson4sNative avgt 10 0.947 ± 0.005 ms/op +BigJsonBenchmarkDeserialize.runJson4sJackson avgt 10 0.814 ± 0.003 ms/op +BigJsonBenchmarkDeserialize.runArgonautJson avgt 10 0.534 ± 0.007 ms/op +BigJsonBenchmarkDeserialize.runPlayJson avgt 10 0.424 ± 0.007 ms/op +BigJsonBenchmarkDeserialize.runCirce avgt 10 0.246 ± 0.002 ms/op +BigJsonBenchmarkDeserialize.runSprayJson avgt 10 0.244 ± 0.002 ms/op +BigJsonBenchmarkDeserialize.runRefuelParsing avgt 10 0.212 ± 0.004 ms/op +BigJsonBenchmarkDeserialize.runWeePickle avgt 10 0.149 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runJacksonParsing avgt 10 0.142 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runUPickle avgt 10 0.138 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runBorer avgt 10 0.104 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runJsoniter avgt 10 0.057 ± 0.001 ms/op + ``` _ordered (lower is better)_ @@ -61,19 +61,19 @@ _ordered (lower is better)_ ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkSerialize.runJson4sNative avgt 10 1,758 ± 0,009 ms/op -BigJsonBenchmarkSerialize.runJson4sJackson avgt 10 1,351 ± 0,015 ms/op -BigJsonBenchmarkSerialize.runPlayJson avgt 10 0,739 ± 0,004 ms/op -BigJsonBenchmarkSerialize.runRefuelParsing avgt 10 0,725 ± 0,039 ms/op -BigJsonBenchmarkSerialize.runUPickle avgt 10 0,671 ± 0,002 ms/op -BigJsonBenchmarkSerialize.runArgonautJson avgt 10 0,436 ± 0,007 ms/op -BigJsonBenchmarkSerialize.runCirce avgt 10 0,369 ± 0,002 ms/op -BigJsonBenchmarkSerialize.runSprayJson avgt 10 0,312 ± 0,001 ms/op -BigJsonBenchmarkSerialize.runSphereJson avgt 10 0,227 ± 0,001 ms/op -BigJsonBenchmarkSerialize.runBorer avgt 10 0,156 ± 0,001 ms/op -BigJsonBenchmarkSerialize.runWeePickle avgt 10 0,130 ± 0,002 ms/op -BigJsonBenchmarkSerialize.runJacksonParsing avgt 10 0,091 ± 0,001 ms/op -BigJsonBenchmarkSerialize.runJsoniter avgt 10 0,078 ± 0,001 ms/op +BigJsonBenchmarkSerialize.runJson4sNative avgt 10 1.054 ± 0.006 ms/op +BigJsonBenchmarkSerialize.runJson4sJackson avgt 10 0.842 ± 0.009 ms/op +BigJsonBenchmarkSerialize.runPlayJson avgt 10 0.544 ± 0.033 ms/op +BigJsonBenchmarkSerialize.runArgonautJson avgt 10 0.362 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runRefuelParsing avgt 10 0.273 ± 0.013 ms/op +BigJsonBenchmarkSerialize.runCirce avgt 10 0.236 ± 0.002 ms/op +BigJsonBenchmarkSerialize.runSprayJson avgt 10 0.235 ± 0.061 ms/op +BigJsonBenchmarkSerialize.runUPickle avgt 10 0.144 ± 0.082 ms/op +BigJsonBenchmarkSerialize.runBorer avgt 10 0.107 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runWeePickle avgt 10 0.103 ± 0.012 ms/op +BigJsonBenchmarkSerialize.runJacksonParsing avgt 10 0.063 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runJsoniter avgt 10 0.043 ± 0.001 ms/op + ``` _ordered (lower is better)_ @@ -87,117 +87,106 @@ _ordered (lower is better)_ ``` Benchmark Mode Cnt Score Error Units +BigJsonBenchmarkDeserialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 2905399.030 ± 20.040 B/op +BigJsonBenchmarkDeserialize.runJson4sNative:·gc.count avgt 10 75.000 counts +BigJsonBenchmarkDeserialize.runJson4sNative:·gc.time avgt 10 60.000 ms -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 2973937,828 ± 6,240 B/op -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.count avgt 10 59,000 counts -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.time avgt 10 43,000 ms - -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 2690641,180 ± 4,096 B/op -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.count avgt 10 86,000 counts -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.time avgt 10 50,000 ms - -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 2129657,616 ± 5,438 B/op -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.count avgt 10 49,000 counts -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.time avgt 10 34,000 ms +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 2594740.879 ± 7.023 B/op +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.count avgt 10 120.000 counts +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.time avgt 10 85.000 ms -BigJsonBenchmarkDeserialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1914960,898 ± 3,088 B/op -BigJsonBenchmarkDeserialize.runPlayJson:·gc.count avgt 10 78,000 counts -BigJsonBenchmarkDeserialize.runPlayJson:·gc.time avgt 10 39,000 ms +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 2265822.738 ± 16.432 B/op +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.count avgt 10 68.000 counts +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.time avgt 10 56.000 ms -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 1064552,577 ± 1,988 B/op -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.count avgt 10 69,000 counts -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.time avgt 10 29,000 ms +BigJsonBenchmarkDeserialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1979112.661 ± 3.806 B/op +BigJsonBenchmarkDeserialize.runPlayJson:·gc.count avgt 10 110.000 counts +BigJsonBenchmarkDeserialize.runPlayJson:·gc.time avgt 10 61.000 ms -BigJsonBenchmarkDeserialize.runCirce:·gc.alloc.rate.norm avgt 10 963560,566 ± 1,979 B/op -BigJsonBenchmarkDeserialize.runCirce:·gc.count avgt 10 64,000 counts -BigJsonBenchmarkDeserialize.runCirce:·gc.time avgt 10 31,000 ms +BigJsonBenchmarkDeserialize.runCirce:·gc.alloc.rate.norm avgt 10 853638.294 ± 14.586 B/op +BigJsonBenchmarkDeserialize.runCirce:·gc.count avgt 10 87.000 counts +BigJsonBenchmarkDeserialize.runCirce:·gc.time avgt 10 50.000 ms -BigJsonBenchmarkDeserialize.runSphereJson:·gc.alloc.rate.norm avgt 10 651872,467 ± 1,615 B/op -BigJsonBenchmarkDeserialize.runSphereJson:·gc.count avgt 10 52,000 counts -BigJsonBenchmarkDeserialize.runSphereJson:·gc.time avgt 10 28,000 ms +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 814906.205 ± 3.597 B/op +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.count avgt 10 96.000 counts +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.time avgt 10 51.000 ms -BigJsonBenchmarkDeserialize.runSprayJson:·gc.alloc.rate.norm avgt 10 511920,611 ± 2,148 B/op -BigJsonBenchmarkDeserialize.runSprayJson:·gc.count avgt 10 32,000 counts -BigJsonBenchmarkDeserialize.runSprayJson:·gc.time avgt 10 14,000 ms +BigJsonBenchmarkDeserialize.runSprayJson:·gc.alloc.rate.norm avgt 10 511952.774 ± 3.876 B/op +BigJsonBenchmarkDeserialize.runSprayJson:·gc.count avgt 10 51.000 counts +BigJsonBenchmarkDeserialize.runSprayJson:·gc.time avgt 10 28.000 ms -BigJsonBenchmarkDeserialize.runUPickle:·gc.alloc.rate.norm avgt 10 475776,496 ± 1,710 B/op -BigJsonBenchmarkDeserialize.runUPickle:·gc.count avgt 10 36,000 counts -BigJsonBenchmarkDeserialize.runUPickle:·gc.time avgt 10 13,000 ms +BigJsonBenchmarkDeserialize.runUPickle:·gc.alloc.rate.norm avgt 10 445387.898 ± 2.917 B/op +BigJsonBenchmarkDeserialize.runUPickle:·gc.count avgt 10 81.000 counts +BigJsonBenchmarkDeserialize.runUPickle:·gc.time avgt 10 37.000 ms -BigJsonBenchmarkDeserialize.runWeePickle:·gc.alloc.rate.norm avgt 10 140032,336 ± 1,109 B/op -BigJsonBenchmarkDeserialize.runWeePickle:·gc.count avgt 10 16,000 counts -BigJsonBenchmarkDeserialize.runWeePickle:·gc.time avgt 10 6,000 ms +BigJsonBenchmarkDeserialize.runWeePickle:·gc.alloc.rate.norm avgt 10 139977.371 ± 3.350 B/op +BigJsonBenchmarkDeserialize.runWeePickle:·gc.count avgt 10 23.000 counts +BigJsonBenchmarkDeserialize.runWeePickle:·gc.time avgt 10 11.000 ms -BigJsonBenchmarkDeserialize.runJsoniter:·gc.alloc.rate.norm avgt 10 129072,116 ± 0,399 B/op -BigJsonBenchmarkDeserialize.runJsoniter:·gc.count avgt 10 41,000 counts -BigJsonBenchmarkDeserialize.runJsoniter:·gc.time avgt 10 16,000 ms +BigJsonBenchmarkDeserialize.runJsoniter:·gc.alloc.rate.norm avgt 10 129080.402 ± 1.342 B/op +BigJsonBenchmarkDeserialize.runJsoniter:·gc.count avgt 10 55.000 counts +BigJsonBenchmarkDeserialize.runJsoniter:·gc.time avgt 10 26.000 ms -BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 123736,278 ± 0,959 B/op -BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.count avgt 10 17,000 counts -BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.time avgt 10 8,000 ms +BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 123744.462 ± 2.522 B/op +BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.count avgt 10 23.000 counts +BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.time avgt 10 11.000 ms -BigJsonBenchmarkDeserialize.runBorer:·gc.alloc.rate.norm avgt 10 121016,231 ± 0,798 B/op -BigJsonBenchmarkDeserialize.runBorer:·gc.count avgt 10 19,000 counts -BigJsonBenchmarkDeserialize.runBorer:·gc.time avgt 10 8,000 ms +BigJsonBenchmarkDeserialize.runBorer:·gc.alloc.rate.norm avgt 10 121024.240 ± 0.962 B/op +BigJsonBenchmarkDeserialize.runBorer:·gc.count avgt 10 28.000 counts +BigJsonBenchmarkDeserialize.runBorer:·gc.time avgt 10 13.000 ms ``` _ordered (lower is better)_ ## Serialization (case class -> String): ``` -Benchmark Mode Cnt Score Error Units - -BigJsonBenchmarkSerialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 3819818,634 ± 8,981 B/op -BigJsonBenchmarkSerialize.runJson4sNative:·gc.count avgt 10 54,000 counts -BigJsonBenchmarkSerialize.runJson4sNative:·gc.time avgt 10 20,000 ms - -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 3209138,007 ± 6,898 B/op -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.count avgt 10 59,000 counts -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.time avgt 10 31,000 ms - -BigJsonBenchmarkSerialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1984673,094 ± 3,772 B/op -BigJsonBenchmarkSerialize.runPlayJson:·gc.count avgt 10 67,000 counts -BigJsonBenchmarkSerialize.runPlayJson:·gc.time avgt 10 31,000 ms +Benchmark Mode Cnt Score Error Units +BigJsonBenchmarkSerialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 3344328.926 ± 19.563 B/op +BigJsonBenchmarkSerialize.runJson4sNative:·gc.count avgt 10 77.000 counts +BigJsonBenchmarkSerialize.runJson4sNative:·gc.time avgt 10 36.000 ms -BigJsonBenchmarkSerialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 1111728,639 ± 2,191 B/op -BigJsonBenchmarkSerialize.runArgonautJson:·gc.count avgt 10 64,000 counts -BigJsonBenchmarkSerialize.runArgonautJson:·gc.time avgt 10 36,000 ms +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 3153256.663 ± 19.661 B/op +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.count avgt 10 84.000 counts +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.time avgt 10 52.000 ms -BigJsonBenchmarkSerialize.runCirce:·gc.alloc.rate.norm avgt 10 795352,545 ± 1,868 B/op -BigJsonBenchmarkSerialize.runCirce:·gc.count avgt 10 54,000 counts -BigJsonBenchmarkSerialize.runCirce:·gc.time avgt 10 22,000 ms +BigJsonBenchmarkSerialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1968762.035 ± 6.548 B/op +BigJsonBenchmarkSerialize.runPlayJson:·gc.count avgt 10 91.000 counts +BigJsonBenchmarkSerialize.runPlayJson:·gc.time avgt 10 53.000 ms -BigJsonBenchmarkSerialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 771001,073 ± 3,671 B/op -BigJsonBenchmarkSerialize.runRefuelParsing:·gc.count avgt 10 27,000 counts -BigJsonBenchmarkSerialize.runRefuelParsing:·gc.time avgt 10 15,000 ms +BigJsonBenchmarkSerialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 1052931.268 ± 7.999 B/op +BigJsonBenchmarkSerialize.runArgonautJson:·gc.count avgt 10 59.000 counts +BigJsonBenchmarkSerialize.runArgonautJson:·gc.time avgt 10 48.000 ms -BigJsonBenchmarkSerialize.runSprayJson:·gc.alloc.rate.norm avgt 10 643465,089 ± 3,232 B/op -BigJsonBenchmarkSerialize.runSprayJson:·gc.count avgt 10 52,000 counts -BigJsonBenchmarkSerialize.runSprayJson:·gc.time avgt 10 21,000 ms +BigJsonBenchmarkSerialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 869102.157 ± 2.253 B/op +BigJsonBenchmarkSerialize.runRefuelParsing:·gc.count avgt 10 80.000 counts +BigJsonBenchmarkSerialize.runRefuelParsing:·gc.time avgt 10 42.000 ms -BigJsonBenchmarkSerialize.runSphereJson:·gc.alloc.rate.norm avgt 10 438536,379 ± 1,333 B/op -BigJsonBenchmarkSerialize.runSphereJson:·gc.count avgt 10 48,000 counts -BigJsonBenchmarkSerialize.runSphereJson:·gc.time avgt 10 26,000 ms +BigJsonBenchmarkSerialize.runCirce:·gc.alloc.rate.norm avgt 10 765495.965 ± 3.792 B/op +BigJsonBenchmarkSerialize.runCirce:·gc.count avgt 10 82.000 counts +BigJsonBenchmarkSerialize.runCirce:·gc.time avgt 10 45.000 ms -BigJsonBenchmarkSerialize.runUPickle:·gc.alloc.rate.norm avgt 10 158137,003 ± 3,448 B/op -BigJsonBenchmarkSerialize.runUPickle:·gc.count avgt 10 6,000 counts -BigJsonBenchmarkSerialize.runUPickle:·gc.time avgt 10 3,000 ms +BigJsonBenchmarkSerialize.runSprayJson:·gc.alloc.rate.norm avgt 10 643952.390 ± 4.875 B/op +BigJsonBenchmarkSerialize.runSprayJson:·gc.count avgt 10 70.000 counts +BigJsonBenchmarkSerialize.runSprayJson:·gc.time avgt 10 34.000 ms -BigJsonBenchmarkSerialize.runWeePickle:·gc.alloc.rate.norm avgt 10 106712,194 ± 0,663 B/op -BigJsonBenchmarkSerialize.runWeePickle:·gc.count avgt 10 20,000 counts -BigJsonBenchmarkSerialize.runWeePickle:·gc.time avgt 10 7,000 ms +BigJsonBenchmarkSerialize.runUPickle:·gc.alloc.rate.norm avgt 10 138161.263 ± 0.673 B/op +BigJsonBenchmarkSerialize.runUPickle:·gc.count avgt 10 30.000 counts +BigJsonBenchmarkSerialize.runUPickle:·gc.time avgt 10 13.000 ms -BigJsonBenchmarkSerialize.runJsoniter:·gc.alloc.rate.norm avgt 10 97576,116 ± 0,400 B/op -BigJsonBenchmarkSerialize.runJsoniter:·gc.count avgt 10 31,000 counts -BigJsonBenchmarkSerialize.runJsoniter:·gc.time avgt 10 11,000 ms +BigJsonBenchmarkSerialize.runWeePickle:·gc.alloc.rate.norm avgt 10 106679.182 ± 1.740 B/op +BigJsonBenchmarkSerialize.runWeePickle:·gc.count avgt 10 28.000 counts +BigJsonBenchmarkSerialize.runWeePickle:·gc.time avgt 10 13.000 ms -BigJsonBenchmarkSerialize.runBorer:·gc.alloc.rate.norm avgt 10 96800,232 ± 0,805 B/op -BigJsonBenchmarkSerialize.runBorer:·gc.count avgt 10 15,000 counts -BigJsonBenchmarkSerialize.runBorer:·gc.time avgt 10 7,000 ms +BigJsonBenchmarkSerialize.runJsoniter:·gc.alloc.rate.norm avgt 10 97582.297 ± 0.779 B/op +BigJsonBenchmarkSerialize.runJsoniter:·gc.count avgt 10 58.000 counts +BigJsonBenchmarkSerialize.runJsoniter:·gc.time avgt 10 27.000 ms -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 46408,133 ± 0,457 B/op -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.count avgt 10 13,000 counts -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.time avgt 10 8,000 ms +BigJsonBenchmarkSerialize.runBorer:·gc.alloc.rate.norm avgt 10 96806.365 ± 1.792 B/op +BigJsonBenchmarkSerialize.runBorer:·gc.count avgt 10 22.000 counts +BigJsonBenchmarkSerialize.runBorer:·gc.time avgt 10 11.000 ms +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 46387.011 ± 1.115 B/op +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.count avgt 10 17.000 counts +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.time avgt 10 8.000 ms ``` _ordered (lower is better)_ diff --git a/build.sbt b/build.sbt index c601496..e105e96 100644 --- a/build.sbt +++ b/build.sbt @@ -18,13 +18,12 @@ libraryDependencies ++= "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.3" :: "org.json4s" %% "json4s-native" % json4sVersion :: "org.json4s" %% "json4s-jackson" % json4sVersion :: - "io.sphere" %% "sphere-json" % "0.12.1" :: "com.typesafe.play" %% "play-json" % "2.9.2" :: "io.spray" %% "spray-json" % "1.3.6" :: "io.argonaut" %% "argonaut" % "6.3.3" :: "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.8.1" :: "com.lihaoyi" %% "upickle" % "1.3.12" :: - "com.phylage" %% "refuel-json" % "1.4.11" :: + "com.phylage" %% "refuel-json" % "2.0.0" :: "io.bullet" %% "borer-derivation" % "1.7.2" :: "com.rallyhealth" %% "weepickle-v1" % "1.4.1" :: Nil diff --git a/src/main/scala/jsonperf/BigJsonTest.scala b/src/main/scala/jsonperf/BigJsonTest.scala index 497c4bf..22fade3 100644 --- a/src/main/scala/jsonperf/BigJsonTest.scala +++ b/src/main/scala/jsonperf/BigJsonTest.scala @@ -1,10 +1,9 @@ package jsonperf -import refuel.json.CodecDef case class Person(name: String, age: Int) case class BigJson(colleagues: Vector[Person]) -class BigJsonTest extends JsonTest[BigJson] with Serializable with CodecDef { +class BigJsonTest extends JsonTest[BigJson] with Serializable { val total = 1000 def colleagues = (for (i ← 1 to 1000) yield s"""{"name": "person-$i", "age": $i}""").mkString(", ") @@ -25,12 +24,6 @@ class BigJsonTest extends JsonTest[BigJson] with Serializable with CodecDef { Json.format[BigJson] } - override def sphereJSON = { - import io.sphere.json.generic._ - implicit val personFromJson = jsonProduct(Person.apply _) - deriveJSON[BigJson] - } - override def sprayJsonFormat = { import spray.json.DefaultJsonProtocol._ implicit val personFormat = spray.json.DefaultJsonProtocol.jsonFormat2(Person) @@ -79,7 +72,10 @@ class BigJsonTest extends JsonTest[BigJson] with Serializable with CodecDef { MapBasedCodecs.deriveCodec[BigJson] } - override def refuelCodec = CaseClassCodec.from[BigJson] + override def refuelCodec = { + import refuel.json.JsonTransform._ + Derive[BigJson] + } override def checkResult(result: BigJson): Unit = { assert(result.colleagues.size == total, s"result.colleagues.size(${result.colleagues.size}) != $total") diff --git a/src/main/scala/jsonperf/JmhBenchmarks.scala b/src/main/scala/jsonperf/JmhBenchmarks.scala index 7965cae..8f81c38 100644 --- a/src/main/scala/jsonperf/JmhBenchmarks.scala +++ b/src/main/scala/jsonperf/JmhBenchmarks.scala @@ -46,9 +46,6 @@ abstract class JmhBenchmarks[A <: AnyRef, B](val test: JsonTest[A]) { @Benchmark def runJson4sJackson: B = runTest(json4sJackson) - @Benchmark - def runSphereJson: B = runTest(sphereJson) - @Benchmark def runPlayJson: B = runTest(playJson) diff --git a/src/main/scala/jsonperf/JsonTest.scala b/src/main/scala/jsonperf/JsonTest.scala index 1930d55..722ba70 100644 --- a/src/main/scala/jsonperf/JsonTest.scala +++ b/src/main/scala/jsonperf/JsonTest.scala @@ -7,8 +7,7 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext def json: String def newA: A def clazz: Class[A] - def refuelCodec: refuel.json.Codec[A] - def sphereJSON: io.sphere.json.JSON[A] + def refuelCodec: refuel.json.codecs.Codec[A] def playFormat: play.api.libs.json.Format[A] def sprayJsonFormat: spray.json.JsonFormat[A] def argonautCodec: argonaut.CodecJson[A] @@ -25,9 +24,9 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext type Parsing = JsonParsing[A] val refuelParsing = new Parsing with refuel.json.JsonTransform { - val codec: refuel.json.Codec[A] = refuelCodec - override def deserialize(json: String): A = json.as[A](codec).right.get - override def serialize(a: A): String = a.toJString(codec) + val codec: refuel.json.codecs.Codec[A] = refuelCodec + override def deserialize(json: String): A = json.readAs[A](codec).get + override def serialize(a: A): String = a.writeAsString(codec).get override def toString: String = "refuelParsing" } @@ -71,17 +70,6 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext override def toString: String = "json4sJackson" } - val sphereJson: Parsing = new Parsing { - val fromToJson = sphereJSON - override def deserialize(json: String): A = { - io.sphere.json.getFromJSON(json)(fromToJson) - } - override def serialize(a: A): String = { - io.sphere.json.toJSON(a)(fromToJson) - } - override def toString: String = "sphereJson" - } - val playJson: Parsing = new Parsing { val format = playFormat override def deserialize(json: String): A = { diff --git a/src/test/scala/jsonperf/UnitTest.scala b/src/test/scala/jsonperf/UnitTest.scala index 87a7938..a0f6842 100644 --- a/src/test/scala/jsonperf/UnitTest.scala +++ b/src/test/scala/jsonperf/UnitTest.scala @@ -16,7 +16,7 @@ class UnitTest extends AnyFreeSpec with Matchers with TableDrivenPropertyChecks import test._ val jsonParsings = Table( "parser", - argonautJson, jacksonParsing, json4sJackson, json4sNative, playJson, sphereJson, sprayJson, circeJson, jsoniter, uPickle, weePickle, borer) + argonautJson, jacksonParsing, json4sJackson, json4sNative, playJson, sprayJson, circeJson, jsoniter, uPickle, weePickle, borer) forAll(jsonParsings) { jsonParsing ⇒ s"using parser '$jsonParsing'" - { From 5f306415d21a51868c6d3ab2c7b363bc49385d96 Mon Sep 17 00:00:00 2001 From: giiita Date: Mon, 15 Nov 2021 20:29:52 +0900 Subject: [PATCH 2/3] Recover sphere json bench --- README.md | 183 ++++++++++---------- build.sbt | 3 +- src/main/scala/jsonperf/BigJsonTest.scala | 6 + src/main/scala/jsonperf/JmhBenchmarks.scala | 3 + src/main/scala/jsonperf/JsonTest.scala | 12 ++ src/test/scala/jsonperf/UnitTest.scala | 2 +- 6 files changed, 115 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 93a6d46..af48f19 100644 --- a/README.md +++ b/README.md @@ -41,19 +41,18 @@ Clone the project and start `sbt`. ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkDeserialize.runJson4sNative avgt 10 0.947 ± 0.005 ms/op -BigJsonBenchmarkDeserialize.runJson4sJackson avgt 10 0.814 ± 0.003 ms/op -BigJsonBenchmarkDeserialize.runArgonautJson avgt 10 0.534 ± 0.007 ms/op -BigJsonBenchmarkDeserialize.runPlayJson avgt 10 0.424 ± 0.007 ms/op -BigJsonBenchmarkDeserialize.runCirce avgt 10 0.246 ± 0.002 ms/op -BigJsonBenchmarkDeserialize.runSprayJson avgt 10 0.244 ± 0.002 ms/op -BigJsonBenchmarkDeserialize.runRefuelParsing avgt 10 0.212 ± 0.004 ms/op -BigJsonBenchmarkDeserialize.runWeePickle avgt 10 0.149 ± 0.001 ms/op -BigJsonBenchmarkDeserialize.runJacksonParsing avgt 10 0.142 ± 0.001 ms/op -BigJsonBenchmarkDeserialize.runUPickle avgt 10 0.138 ± 0.001 ms/op -BigJsonBenchmarkDeserialize.runBorer avgt 10 0.104 ± 0.001 ms/op -BigJsonBenchmarkDeserialize.runJsoniter avgt 10 0.057 ± 0.001 ms/op - +BigJsonBenchmarkDeserialize.runJson4sJackson avgt 10 0.810 ± 0.010 ms/op +BigJsonBenchmarkDeserialize.runArgonautJson avgt 10 0.523 ± 0.007 ms/op +BigJsonBenchmarkDeserialize.runPlayJson avgt 10 0.456 ± 0.067 ms/op +BigJsonBenchmarkDeserialize.runCirce avgt 10 0.256 ± 0.029 ms/op +BigJsonBenchmarkDeserialize.runSprayJson avgt 10 0.237 ± 0.021 ms/op +BigJsonBenchmarkDeserialize.runRefuelParsing avgt 10 0.219 ± 0.002 ms/op +BigJsonBenchmarkDeserialize.runSphereJson avgt 10 0.167 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runWeePickle avgt 10 0.151 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runUPickle avgt 10 0.141 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runJacksonParsing avgt 10 0.138 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runBorer avgt 10 0.105 ± 0.001 ms/op +BigJsonBenchmarkDeserialize.runJsoniter avgt 10 0.060 ± 0.007 ms/op ``` _ordered (lower is better)_ @@ -61,18 +60,18 @@ _ordered (lower is better)_ ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkSerialize.runJson4sNative avgt 10 1.054 ± 0.006 ms/op -BigJsonBenchmarkSerialize.runJson4sJackson avgt 10 0.842 ± 0.009 ms/op -BigJsonBenchmarkSerialize.runPlayJson avgt 10 0.544 ± 0.033 ms/op -BigJsonBenchmarkSerialize.runArgonautJson avgt 10 0.362 ± 0.001 ms/op -BigJsonBenchmarkSerialize.runRefuelParsing avgt 10 0.273 ± 0.013 ms/op -BigJsonBenchmarkSerialize.runCirce avgt 10 0.236 ± 0.002 ms/op -BigJsonBenchmarkSerialize.runSprayJson avgt 10 0.235 ± 0.061 ms/op -BigJsonBenchmarkSerialize.runUPickle avgt 10 0.144 ± 0.082 ms/op -BigJsonBenchmarkSerialize.runBorer avgt 10 0.107 ± 0.001 ms/op -BigJsonBenchmarkSerialize.runWeePickle avgt 10 0.103 ± 0.012 ms/op -BigJsonBenchmarkSerialize.runJacksonParsing avgt 10 0.063 ± 0.001 ms/op -BigJsonBenchmarkSerialize.runJsoniter avgt 10 0.043 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runJson4sJackson avgt 10 0.847 ± 0.007 ms/op +BigJsonBenchmarkSerialize.runPlayJson avgt 10 0.531 ± 0.003 ms/op +BigJsonBenchmarkSerialize.runArgonautJson avgt 10 0.335 ± 0.030 ms/op +BigJsonBenchmarkSerialize.runRefuelParsing avgt 10 0.271 ± 0.033 ms/op +BigJsonBenchmarkSerialize.runCirce avgt 10 0.237 ± 0.002 ms/op +BigJsonBenchmarkSerialize.runSprayJson avgt 10 0.215 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runBorer avgt 10 0.103 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runUPickle avgt 10 0.098 ± 0.008 ms/op +BigJsonBenchmarkSerialize.runWeePickle avgt 10 0.098 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runSphereJson avgt 10 0.091 ± 0.001 ms/op +BigJsonBenchmarkSerialize.runJacksonParsing avgt 10 0.063 ± 0.004 ms/op +BigJsonBenchmarkSerialize.runJsoniter avgt 10 0.042 ± 0.001 ms/op ``` _ordered (lower is better)_ @@ -87,53 +86,53 @@ _ordered (lower is better)_ ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 2905399.030 ± 20.040 B/op -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.count avgt 10 75.000 counts -BigJsonBenchmarkDeserialize.runJson4sNative:·gc.time avgt 10 60.000 ms - -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 2594740.879 ± 7.023 B/op -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.count avgt 10 120.000 counts -BigJsonBenchmarkDeserialize.runArgonautJson:·gc.time avgt 10 85.000 ms +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 2578769.986 ± 53.779 B/op +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.count avgt 10 96.000 counts +BigJsonBenchmarkDeserialize.runArgonautJson:·gc.time avgt 10 63.000 ms -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 2265822.738 ± 16.432 B/op -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.count avgt 10 68.000 counts -BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.time avgt 10 56.000 ms +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 2065771.154 ± 15.221 B/op +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.count avgt 10 62.000 counts +BigJsonBenchmarkDeserialize.runJson4sJackson:·gc.time avgt 10 47.000 ms -BigJsonBenchmarkDeserialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1979112.661 ± 3.806 B/op -BigJsonBenchmarkDeserialize.runPlayJson:·gc.count avgt 10 110.000 counts -BigJsonBenchmarkDeserialize.runPlayJson:·gc.time avgt 10 61.000 ms +BigJsonBenchmarkDeserialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1979111.057 ± 8.216 B/op +BigJsonBenchmarkDeserialize.runPlayJson:·gc.count avgt 10 107.000 counts +BigJsonBenchmarkDeserialize.runPlayJson:·gc.time avgt 10 53.000 ms -BigJsonBenchmarkDeserialize.runCirce:·gc.alloc.rate.norm avgt 10 853638.294 ± 14.586 B/op -BigJsonBenchmarkDeserialize.runCirce:·gc.count avgt 10 87.000 counts -BigJsonBenchmarkDeserialize.runCirce:·gc.time avgt 10 50.000 ms +BigJsonBenchmarkDeserialize.runCirce:·gc.alloc.rate.norm avgt 10 867614.524 ± 9.233 B/op +BigJsonBenchmarkDeserialize.runCirce:·gc.count avgt 10 86.000 counts +BigJsonBenchmarkDeserialize.runCirce:·gc.time avgt 10 47.000 ms -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 814906.205 ± 3.597 B/op -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.count avgt 10 96.000 counts -BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.time avgt 10 51.000 ms +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 814906.798 ± 3.588 B/op +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.count avgt 10 92.000 counts +BigJsonBenchmarkDeserialize.runRefuelParsing:·gc.time avgt 10 44.000 ms -BigJsonBenchmarkDeserialize.runSprayJson:·gc.alloc.rate.norm avgt 10 511952.774 ± 3.876 B/op +BigJsonBenchmarkDeserialize.runSprayJson:·gc.alloc.rate.norm avgt 10 511955.300 ± 5.591 B/op BigJsonBenchmarkDeserialize.runSprayJson:·gc.count avgt 10 51.000 counts -BigJsonBenchmarkDeserialize.runSprayJson:·gc.time avgt 10 28.000 ms +BigJsonBenchmarkDeserialize.runSprayJson:·gc.time avgt 10 27.000 ms + +BigJsonBenchmarkDeserialize.runUPickle:·gc.alloc.rate.norm avgt 10 413386.161 ± 2.526 B/op +BigJsonBenchmarkDeserialize.runUPickle:·gc.count avgt 10 70.000 counts +BigJsonBenchmarkDeserialize.runUPickle:·gc.time avgt 10 31.000 ms -BigJsonBenchmarkDeserialize.runUPickle:·gc.alloc.rate.norm avgt 10 445387.898 ± 2.917 B/op -BigJsonBenchmarkDeserialize.runUPickle:·gc.count avgt 10 81.000 counts -BigJsonBenchmarkDeserialize.runUPickle:·gc.time avgt 10 37.000 ms +BigJsonBenchmarkDeserialize.runSphereJson:·gc.alloc.rate.norm avgt 10 371895.585 ± 3.512 B/op +BigJsonBenchmarkDeserialize.runSphereJson:·gc.count avgt 10 54.000 counts +BigJsonBenchmarkDeserialize.runSphereJson:·gc.time avgt 10 34.000 ms -BigJsonBenchmarkDeserialize.runWeePickle:·gc.alloc.rate.norm avgt 10 139977.371 ± 3.350 B/op +BigJsonBenchmarkDeserialize.runWeePickle:·gc.alloc.rate.norm avgt 10 139977.664 ± 3.377 B/op BigJsonBenchmarkDeserialize.runWeePickle:·gc.count avgt 10 23.000 counts -BigJsonBenchmarkDeserialize.runWeePickle:·gc.time avgt 10 11.000 ms +BigJsonBenchmarkDeserialize.runWeePickle:·gc.time avgt 10 10.000 ms -BigJsonBenchmarkDeserialize.runJsoniter:·gc.alloc.rate.norm avgt 10 129080.402 ± 1.342 B/op -BigJsonBenchmarkDeserialize.runJsoniter:·gc.count avgt 10 55.000 counts -BigJsonBenchmarkDeserialize.runJsoniter:·gc.time avgt 10 26.000 ms +BigJsonBenchmarkDeserialize.runJsoniter:·gc.alloc.rate.norm avgt 10 129080.363 ± 1.384 B/op +BigJsonBenchmarkDeserialize.runJsoniter:·gc.count avgt 10 53.000 counts +BigJsonBenchmarkDeserialize.runJsoniter:·gc.time avgt 10 23.000 ms -BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 123744.462 ± 2.522 B/op +BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 123744.709 ± 2.402 B/op BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.count avgt 10 23.000 counts BigJsonBenchmarkDeserialize.runJacksonParsing:·gc.time avgt 10 11.000 ms -BigJsonBenchmarkDeserialize.runBorer:·gc.alloc.rate.norm avgt 10 121024.240 ± 0.962 B/op +BigJsonBenchmarkDeserialize.runBorer:·gc.alloc.rate.norm avgt 10 121024.180 ± 2.153 B/op BigJsonBenchmarkDeserialize.runBorer:·gc.count avgt 10 28.000 counts -BigJsonBenchmarkDeserialize.runBorer:·gc.time avgt 10 13.000 ms +BigJsonBenchmarkDeserialize.runBorer:·gc.time avgt 10 12.000 ms ``` _ordered (lower is better)_ @@ -141,52 +140,52 @@ _ordered (lower is better)_ ``` Benchmark Mode Cnt Score Error Units -BigJsonBenchmarkSerialize.runJson4sNative:·gc.alloc.rate.norm avgt 10 3344328.926 ± 19.563 B/op -BigJsonBenchmarkSerialize.runJson4sNative:·gc.count avgt 10 77.000 counts -BigJsonBenchmarkSerialize.runJson4sNative:·gc.time avgt 10 36.000 ms +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 3153258.449 ± 14.184 B/op +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.count avgt 10 91.000 counts +BigJsonBenchmarkSerialize.runJson4sJackson:·gc.time avgt 10 53.000 ms -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.alloc.rate.norm avgt 10 3153256.663 ± 19.661 B/op -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.count avgt 10 84.000 counts -BigJsonBenchmarkSerialize.runJson4sJackson:·gc.time avgt 10 52.000 ms +BigJsonBenchmarkSerialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1968760.583 ± 5.757 B/op +BigJsonBenchmarkSerialize.runPlayJson:·gc.count avgt 10 89.000 counts +BigJsonBenchmarkSerialize.runPlayJson:·gc.time avgt 10 50.000 ms -BigJsonBenchmarkSerialize.runPlayJson:·gc.alloc.rate.norm avgt 10 1968762.035 ± 6.548 B/op -BigJsonBenchmarkSerialize.runPlayJson:·gc.count avgt 10 91.000 counts -BigJsonBenchmarkSerialize.runPlayJson:·gc.time avgt 10 53.000 ms +BigJsonBenchmarkSerialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 1076875.212 ± 5.822 B/op +BigJsonBenchmarkSerialize.runArgonautJson:·gc.count avgt 10 88.000 counts +BigJsonBenchmarkSerialize.runArgonautJson:·gc.time avgt 10 61.000 ms -BigJsonBenchmarkSerialize.runArgonautJson:·gc.alloc.rate.norm avgt 10 1052931.268 ± 7.999 B/op -BigJsonBenchmarkSerialize.runArgonautJson:·gc.count avgt 10 59.000 counts -BigJsonBenchmarkSerialize.runArgonautJson:·gc.time avgt 10 48.000 ms - -BigJsonBenchmarkSerialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 869102.157 ± 2.253 B/op +BigJsonBenchmarkSerialize.runRefuelParsing:·gc.alloc.rate.norm avgt 10 893111.629 ± 22.419 B/op BigJsonBenchmarkSerialize.runRefuelParsing:·gc.count avgt 10 80.000 counts -BigJsonBenchmarkSerialize.runRefuelParsing:·gc.time avgt 10 42.000 ms +BigJsonBenchmarkSerialize.runRefuelParsing:·gc.time avgt 10 44.000 ms + +BigJsonBenchmarkSerialize.runCirce:·gc.alloc.rate.norm avgt 10 765495.574 ± 3.241 B/op +BigJsonBenchmarkSerialize.runCirce:·gc.count avgt 10 79.000 counts +BigJsonBenchmarkSerialize.runCirce:·gc.time avgt 10 39.000 ms -BigJsonBenchmarkSerialize.runCirce:·gc.alloc.rate.norm avgt 10 765495.965 ± 3.792 B/op -BigJsonBenchmarkSerialize.runCirce:·gc.count avgt 10 82.000 counts -BigJsonBenchmarkSerialize.runCirce:·gc.time avgt 10 45.000 ms +BigJsonBenchmarkSerialize.runSprayJson:·gc.alloc.rate.norm avgt 10 643952.034 ± 4.426 B/op +BigJsonBenchmarkSerialize.runSprayJson:·gc.count avgt 10 73.000 counts +BigJsonBenchmarkSerialize.runSprayJson:·gc.time avgt 10 36.000 ms -BigJsonBenchmarkSerialize.runSprayJson:·gc.alloc.rate.norm avgt 10 643952.390 ± 4.875 B/op -BigJsonBenchmarkSerialize.runSprayJson:·gc.count avgt 10 70.000 counts -BigJsonBenchmarkSerialize.runSprayJson:·gc.time avgt 10 34.000 ms +BigJsonBenchmarkSerialize.runSphereJson:·gc.alloc.rate.norm avgt 10 222518.314 ± 1.144 B/op +BigJsonBenchmarkSerialize.runSphereJson:·gc.count avgt 10 60.000 counts +BigJsonBenchmarkSerialize.runSphereJson:·gc.time avgt 10 35.000 ms -BigJsonBenchmarkSerialize.runUPickle:·gc.alloc.rate.norm avgt 10 138161.263 ± 0.673 B/op -BigJsonBenchmarkSerialize.runUPickle:·gc.count avgt 10 30.000 counts -BigJsonBenchmarkSerialize.runUPickle:·gc.time avgt 10 13.000 ms +BigJsonBenchmarkSerialize.runUPickle:·gc.alloc.rate.norm avgt 10 138161.427 ± 2.101 B/op +BigJsonBenchmarkSerialize.runUPickle:·gc.count avgt 10 35.000 counts +BigJsonBenchmarkSerialize.runUPickle:·gc.time avgt 10 14.000 ms -BigJsonBenchmarkSerialize.runWeePickle:·gc.alloc.rate.norm avgt 10 106679.182 ± 1.740 B/op -BigJsonBenchmarkSerialize.runWeePickle:·gc.count avgt 10 28.000 counts +BigJsonBenchmarkSerialize.runWeePickle:·gc.alloc.rate.norm avgt 10 106655.199 ± 1.394 B/op +BigJsonBenchmarkSerialize.runWeePickle:·gc.count avgt 10 30.000 counts BigJsonBenchmarkSerialize.runWeePickle:·gc.time avgt 10 13.000 ms -BigJsonBenchmarkSerialize.runJsoniter:·gc.alloc.rate.norm avgt 10 97582.297 ± 0.779 B/op -BigJsonBenchmarkSerialize.runJsoniter:·gc.count avgt 10 58.000 counts -BigJsonBenchmarkSerialize.runJsoniter:·gc.time avgt 10 27.000 ms +BigJsonBenchmarkSerialize.runJsoniter:·gc.alloc.rate.norm avgt 10 97582.325 ± 0.290 B/op +BigJsonBenchmarkSerialize.runJsoniter:·gc.count avgt 10 60.000 counts +BigJsonBenchmarkSerialize.runJsoniter:·gc.time avgt 10 26.000 ms -BigJsonBenchmarkSerialize.runBorer:·gc.alloc.rate.norm avgt 10 96806.365 ± 1.792 B/op -BigJsonBenchmarkSerialize.runBorer:·gc.count avgt 10 22.000 counts -BigJsonBenchmarkSerialize.runBorer:·gc.time avgt 10 11.000 ms +BigJsonBenchmarkSerialize.runBorer:·gc.alloc.rate.norm avgt 10 96806.575 ± 2.005 B/op +BigJsonBenchmarkSerialize.runBorer:·gc.count avgt 10 23.000 counts +BigJsonBenchmarkSerialize.runBorer:·gc.time avgt 10 10.000 ms -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 46387.011 ± 1.115 B/op -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.count avgt 10 17.000 counts -BigJsonBenchmarkSerialize.runJacksonParsing:·gc.time avgt 10 8.000 ms +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.alloc.rate.norm avgt 10 46387.296 ± 0.916 B/op +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.count avgt 10 19.000 counts +BigJsonBenchmarkSerialize.runJacksonParsing:·gc.time avgt 10 9.000 ms ``` _ordered (lower is better)_ diff --git a/build.sbt b/build.sbt index e105e96..0b4383d 100644 --- a/build.sbt +++ b/build.sbt @@ -18,12 +18,13 @@ libraryDependencies ++= "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.3" :: "org.json4s" %% "json4s-native" % json4sVersion :: "org.json4s" %% "json4s-jackson" % json4sVersion :: + "com.commercetools" %% "sphere-json" % "0.12.5" :: "com.typesafe.play" %% "play-json" % "2.9.2" :: "io.spray" %% "spray-json" % "1.3.6" :: "io.argonaut" %% "argonaut" % "6.3.3" :: "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.8.1" :: "com.lihaoyi" %% "upickle" % "1.3.12" :: - "com.phylage" %% "refuel-json" % "2.0.0" :: + "com.phylage" %% "refuel-json" % "2.0.1" :: "io.bullet" %% "borer-derivation" % "1.7.2" :: "com.rallyhealth" %% "weepickle-v1" % "1.4.1" :: Nil diff --git a/src/main/scala/jsonperf/BigJsonTest.scala b/src/main/scala/jsonperf/BigJsonTest.scala index 22fade3..71511f3 100644 --- a/src/main/scala/jsonperf/BigJsonTest.scala +++ b/src/main/scala/jsonperf/BigJsonTest.scala @@ -24,6 +24,12 @@ class BigJsonTest extends JsonTest[BigJson] with Serializable { Json.format[BigJson] } + override def sphereJSON = { + import io.sphere.json.generic._ + implicit val personFromJson = jsonProduct(Person.apply _) + deriveJSON[BigJson] + } + override def sprayJsonFormat = { import spray.json.DefaultJsonProtocol._ implicit val personFormat = spray.json.DefaultJsonProtocol.jsonFormat2(Person) diff --git a/src/main/scala/jsonperf/JmhBenchmarks.scala b/src/main/scala/jsonperf/JmhBenchmarks.scala index 8f81c38..7965cae 100644 --- a/src/main/scala/jsonperf/JmhBenchmarks.scala +++ b/src/main/scala/jsonperf/JmhBenchmarks.scala @@ -46,6 +46,9 @@ abstract class JmhBenchmarks[A <: AnyRef, B](val test: JsonTest[A]) { @Benchmark def runJson4sJackson: B = runTest(json4sJackson) + @Benchmark + def runSphereJson: B = runTest(sphereJson) + @Benchmark def runPlayJson: B = runTest(playJson) diff --git a/src/main/scala/jsonperf/JsonTest.scala b/src/main/scala/jsonperf/JsonTest.scala index 722ba70..85d2e73 100644 --- a/src/main/scala/jsonperf/JsonTest.scala +++ b/src/main/scala/jsonperf/JsonTest.scala @@ -8,6 +8,7 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext def newA: A def clazz: Class[A] def refuelCodec: refuel.json.codecs.Codec[A] + def sphereJSON: io.sphere.json.JSON[A] def playFormat: play.api.libs.json.Format[A] def sprayJsonFormat: spray.json.JsonFormat[A] def argonautCodec: argonaut.CodecJson[A] @@ -70,6 +71,17 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext override def toString: String = "json4sJackson" } + val sphereJson: Parsing = new Parsing { + val fromToJson = sphereJSON + override def deserialize(json: String): A = { + io.sphere.json.getFromJSON(json)(fromToJson) + } + override def serialize(a: A): String = { + io.sphere.json.toJSON(a)(fromToJson) + } + override def toString: String = "sphereJson" + } + val playJson: Parsing = new Parsing { val format = playFormat override def deserialize(json: String): A = { diff --git a/src/test/scala/jsonperf/UnitTest.scala b/src/test/scala/jsonperf/UnitTest.scala index a0f6842..87a7938 100644 --- a/src/test/scala/jsonperf/UnitTest.scala +++ b/src/test/scala/jsonperf/UnitTest.scala @@ -16,7 +16,7 @@ class UnitTest extends AnyFreeSpec with Matchers with TableDrivenPropertyChecks import test._ val jsonParsings = Table( "parser", - argonautJson, jacksonParsing, json4sJackson, json4sNative, playJson, sprayJson, circeJson, jsoniter, uPickle, weePickle, borer) + argonautJson, jacksonParsing, json4sJackson, json4sNative, playJson, sphereJson, sprayJson, circeJson, jsoniter, uPickle, weePickle, borer) forAll(jsonParsings) { jsonParsing ⇒ s"using parser '$jsonParsing'" - { From a5b7c32d485e94145aaf2960ef42f3a56f01bdff Mon Sep 17 00:00:00 2001 From: giiita Date: Mon, 15 Nov 2021 20:42:26 +0900 Subject: [PATCH 3/3] Fix json4s version --- build.sbt | 2 +- src/main/scala/jsonperf/JsonTest.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 0b4383d..eeb6f7c 100644 --- a/build.sbt +++ b/build.sbt @@ -4,7 +4,7 @@ version := "1.0" scalaVersion := "2.13.5" -val json4sVersion = "3.7.0-M11" +val json4sVersion = "4.0.3" val circeVersion = "0.13.0" resolvers ++= diff --git a/src/main/scala/jsonperf/JsonTest.scala b/src/main/scala/jsonperf/JsonTest.scala index 85d2e73..60bc83d 100644 --- a/src/main/scala/jsonperf/JsonTest.scala +++ b/src/main/scala/jsonperf/JsonTest.scala @@ -49,7 +49,7 @@ abstract class JsonTest[A <: AnyRef](implicit ev: scala.reflect.Manifest[A]) ext import org.json4s.native.Serialization implicit val formats = DefaultFormats override def deserialize(json: String): A = { - parse(json).extract[A] + org.json4s.native.JsonMethods.parse(json).extract[A] } override def serialize(a: A): String = { Serialization.write(a)