Skip to content

Commit 6d24045

Browse files
samuelAndalonSamuel Vazquez
and
Samuel Vazquez
authored
feat: update fastjson2 (#2076)
benchmarks GraphQLRequest deserialization jackson vs fastjson2 ![image](https://github.com/user-attachments/assets/aa31c409-ec2c-4d3e-b447-690da2c00980) GraphQLResponse serialization Jackson vs fastjson2 ![image](https://github.com/user-attachments/assets/45934224-5e20-447f-955f-9736ae931aab) --------- Co-authored-by: Samuel Vazquez <[email protected]>
1 parent ce8124a commit 6d24045

File tree

9 files changed

+561
-427
lines changed

9 files changed

+561
-427
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ kotlinx-coroutines = "1.9.0"
1313
# TODO kotlin 1.9 upgrade: fix GraphQLTestUtils and GenerateKotlinxClientIT
1414
kotlinx-serialization = "1.6.3"
1515
ktor = "3.0.3"
16-
fastjson2 = "2.0.53"
16+
fastjson2 = "2.0.56"
1717
maven-plugin-annotation = "3.13.1"
1818
maven-plugin-api = "3.9.8"
1919
maven-project = "2.2.1"

servers/graphql-kotlin-server/src/benchmarks/kotlin/GraphQLServerRequestBatchDeserializationBenchmark.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,38 @@ import org.openjdk.jmh.annotations.Warmup
3232
import java.util.concurrent.TimeUnit
3333

3434
@State(Scope.Benchmark)
35-
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector", "-Dfastjson2.readerVector=true"])
35+
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector"])
3636
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS)
3737
@Measurement(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS)
3838
open class GraphQLServerRequestBatchDeserializationBenchmark {
3939
private val mapper = jacksonObjectMapper()
40-
private lateinit var request: String
4140
private lateinit var batchRequest: String
4241

4342
@Setup
4443
fun setUp() {
4544
JSON.config(JSONWriter.Feature.WriteNulls)
4645
val loader = this::class.java.classLoader
47-
val operation = loader.getResource("StarWarsDetails.graphql")!!.readText().replace("\n", "\\n")
48-
val variables = loader.getResource("StarWarsDetailsVariables.json")!!.readText()
46+
val operation1 = loader.getResource("StarWarsDetails.graphql")!!.readText().replace("\n", "\\n")
47+
val operation2 = loader.getResource("StarWarsDetails.graphql")!!.readText().replace("\n", "\\n")
48+
val operation3 = loader.getResource("StarWarsDetails.graphql")!!.readText().replace("\n", "\\n")
49+
val operation4 = loader.getResource("StarWarsDetails.graphql")!!.readText().replace("\n", "\\n")
50+
val variables1 = loader.getResource("StarWarsDetailsVariables.json")!!.readText()
51+
val variables2 = loader.getResource("StarWarsDetailsVariables.json")!!.readText()
52+
val variables3 = loader.getResource("StarWarsDetailsVariables.json")!!.readText()
53+
val variables4 = loader.getResource("StarWarsDetailsVariables.json")!!.readText()
4954
batchRequest = """
5055
[
51-
{ "operationName": "StarWarsDetails", "query": "$operation", "variables": $variables },
52-
{ "operationName": "StarWarsDetails", "query": "$operation", "variables": $variables },
53-
{ "operationName": "StarWarsDetails", "query": "$operation", "variables": $variables },
54-
{ "operationName": "StarWarsDetails", "query": "$operation", "variables": $variables }
56+
{ "operationName": "StarWarsDetails", "query": "$operation1", "variables": $variables1 },
57+
{ "operationName": "StarWarsDetails", "query": "$operation2", "variables": $variables2 },
58+
{ "operationName": "StarWarsDetails", "query": "$operation3", "variables": $variables3 },
59+
{ "operationName": "StarWarsDetails", "query": "$operation4", "variables": $variables4 }
5560
]
5661
""".trimIndent()
5762
}
5863

5964
@Benchmark
60-
fun JacksonDeserializeGraphQLBatchRequest(): GraphQLServerRequest = mapper.readValue(batchRequest)
65+
fun jackson(): GraphQLServerRequest = mapper.readValue(batchRequest)
6166

6267
@Benchmark
63-
fun FastJsonDeserializeGraphQLBatchRequest(): GraphQLServerRequest = batchRequest.to<GraphQLServerRequest>()
68+
fun fastjson2(): GraphQLServerRequest = batchRequest.to<GraphQLServerRequest>()
6469
}

servers/graphql-kotlin-server/src/benchmarks/kotlin/GraphQLServerRequestDeserializationBenchmark.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import org.openjdk.jmh.annotations.Warmup
3232
import java.util.concurrent.TimeUnit
3333

3434
@State(Scope.Benchmark)
35-
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector", "-Dfastjson2.readerVector=true"])
35+
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector"])
3636
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS)
3737
@Measurement(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS)
3838
open class GraphQLServerRequestDeserializationBenchmark {
@@ -55,8 +55,8 @@ open class GraphQLServerRequestDeserializationBenchmark {
5555
}
5656

5757
@Benchmark
58-
fun JacksonDeserializeGraphQLRequest(): GraphQLServerRequest = mapper.readValue(request)
58+
fun jackson(): GraphQLServerRequest = mapper.readValue(request)
5959

6060
@Benchmark
61-
fun FastJsonDeserializeGraphQLRequest(): GraphQLServerRequest = request.to()
61+
fun fastjson2(): GraphQLServerRequest = request.to()
6262
}

servers/graphql-kotlin-server/src/benchmarks/kotlin/GraphQLServerResponseBatchSerializationBenchmark.kt

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import org.openjdk.jmh.annotations.Warmup
3232
import java.util.concurrent.TimeUnit
3333

3434
@State(Scope.Benchmark)
35-
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector", "-Dfastjson2.readerVector=true"])
35+
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector"])
3636
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS)
3737
@Measurement(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS)
3838
open class GraphQLServerResponseBatchSerializationBenchmark {
@@ -42,22 +42,35 @@ open class GraphQLServerResponseBatchSerializationBenchmark {
4242
@Setup
4343
fun setUp() {
4444
JSON.config(JSONWriter.Feature.WriteNulls)
45-
val data = mapper.readValue<Map<String, Any?>>(
46-
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
47-
)
4845
batchResponse = GraphQLBatchResponse(
4946
listOf(
50-
GraphQLResponse(data),
51-
GraphQLResponse(data),
52-
GraphQLResponse(data),
53-
GraphQLResponse(data)
47+
GraphQLResponse(
48+
mapper.readValue<Map<String, Any?>>(
49+
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
50+
)
51+
),
52+
GraphQLResponse(
53+
mapper.readValue<Map<String, Any?>>(
54+
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
55+
)
56+
),
57+
GraphQLResponse(
58+
mapper.readValue<Map<String, Any?>>(
59+
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
60+
)
61+
),
62+
GraphQLResponse(
63+
mapper.readValue<Map<String, Any?>>(
64+
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
65+
)
66+
)
5467
)
5568
)
5669
}
5770

5871
@Benchmark
59-
fun JacksonSerializeGraphQLBatchResponse(): String = mapper.writeValueAsString(batchResponse)
72+
fun jackson(): String = mapper.writeValueAsString(batchResponse)
6073

6174
@Benchmark
62-
fun FastJsonSerializeGraphQLBatchResponse(): String = JSON.toJSONString(batchResponse)
75+
fun fastjson2(): String = JSON.toJSONString(batchResponse)
6376
}

servers/graphql-kotlin-server/src/benchmarks/kotlin/GraphQLServerResponseSerializationBenchmark.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import org.openjdk.jmh.annotations.Warmup
3131
import java.util.concurrent.TimeUnit
3232

3333
@State(Scope.Benchmark)
34-
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector", "-Dfastjson2.readerVector=true"])
34+
@Fork(value = 5, jvmArgsAppend = ["--add-modules=jdk.incubator.vector"])
3535
@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS)
3636
@Measurement(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS)
3737
open class GraphQLServerResponseSerializationBenchmark {
@@ -41,9 +41,6 @@ open class GraphQLServerResponseSerializationBenchmark {
4141
@Setup
4242
fun setUp() {
4343
JSON.config(JSONWriter.Feature.WriteNulls)
44-
val data = mapper.readValue<Map<String, Any?>>(
45-
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
46-
)
4744
response = GraphQLResponse(
4845
mapper.readValue<Map<String, Any?>>(
4946
this::class.java.classLoader.getResourceAsStream("StarWarsDetailsResponse.json")!!
@@ -52,8 +49,8 @@ open class GraphQLServerResponseSerializationBenchmark {
5249
}
5350

5451
@Benchmark
55-
fun JacksonSerializeGraphQLResponse(): String = mapper.writeValueAsString(response)
52+
fun jackson(): String = mapper.writeValueAsString(response)
5653

5754
@Benchmark
58-
fun FastJsonSerializeGraphQLResponse(): String = JSON.toJSONString(response)
55+
fun fastjson2(): String = JSON.toJSONString(response)
5956
}

0 commit comments

Comments
 (0)