🌲
JSONDecoderの速度テスト
Decode先の型によってdecode速度が変わるかどうか
例えば巨大なJSONから、特定のキーの値が欲しい場合全てをdecodeする型と欲しいキーのみdecodeする型だとどちらが早いのでしょうか。
{
"key": "value",
"children" : [
{
"id": "xxxx"
},
... // 100000件
]
}
このようなJSONを
全てのキーを含む
struct JSONObject: Codable {
var key: String
var children: [ChildObject]
}
struct ChildObject: Codable {
let id: UUID
}
キーのみ
struct KeyOnly: Codable {
var key: String
}
の両方でdecodeして比較します。
JSONObject | KeyOnly |
---|---|
0.361 | 0.038 |
明らかに早くなりました。使うキーだけを含めたstructでdecodeするのが良さそうです。
JSONのキーの並びによってdecode速度は変わるのか
もしdecodeが頭からキーを探しに行くとすると、keyが後ろにある方が遅くなりそうです。
先ほどのKeyOnlyを使って、次の2つのJSONをデコードします。
先頭にkey
{
"key": "value",
"children" : [
{
"id": "xxxx"
},
... // 100000件
]
}
後方にkey
{
"children" : [
{
"id": "xxxx"
},
... // 100000件
],
"key": "value"
}
前方 | 後方 |
---|---|
0.038 | 0.038 |
どうやらJSONの構造ではそこまで速度は変わらないようです。
複雑なJSONで同じ結果になるか分かりませんが、参考までに。
Discussion