🌲

JSONDecoderの速度テスト

2023/01/18に公開

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