LogoLogo

Schema Benchmarks

    • home
      Home

    • download_2
      Download

    • timer
      Initialization
    • check_circle
      Validation
    • output_circle
      Parsing
    • swap_horiz
      Codec
    • schema
      Standard Schema
    • format_quote
      String

    • error
      Stack
    • assignment_turned_in
      TypeScript

  • JSON Schema

    • data_object
      Schema to JSON
    • code
      JSON to Schema
    • verified
      Compliance

    • deployed_code
      Libraries

    • article
      Blog
Expand sidebarExpand sidebar
Benchmarks/CodecCodec
github
GitHubGitHub
DiscordDiscord
PreferencesPreferences

Some schema libraries support two way conversion of data, often referred to as "encoding" and "decoding".

We benchmark the time taken to encode and decode a bigint to and from a string.

Copy to clipboardCopy to clipboard
import * as z from "zod"; const bigIntFromString = z.codec( z.string(), z.bigint(), { decode: (str) => BigInt(str), encode: (bigint) => bigint.toString(), }, ); bigIntFromString.encode( 1234567890123456789n, ); // "1234567890123456789" bigIntFromString.decode( "1234567890123456789", ); // 1234567890123456789n
Copy to clipboardCopy to clipboard
import * as z from "zod"; const bigIntFromString = z.codec(z.string(), z.bigint(), { decode: (str) => BigInt(str), encode: (bigint) => bigint.toString(), }); bigIntFromString.encode(1234567890123456789n); // "1234567890123456789" bigIntFromString.decode("1234567890123456789"); // 1234567890123456789n
format_quoteInvalid data

We don't benchmark codecs with invalid data, as many libraries require the input to be correctly typed before passing it to the codec.

Optimizations
  • flash_offNone
  • codeJIT
  • buildPrecompiled
LibrarysortVersiondownload/wksortOptimizationsEncodearrow_upwardDecodesort
sury11.0.0n/aJIT
Code snippetCode snippet
const encode = S.encodeOrThrow(S.bigint, S.string);
encode(data)

(Setup code is not benchmarked)

70 ns
Code snippetCode snippet
const decode = S.decodeOrThrow(S.string, S.bigint);
decode(data)

(Setup code is not benchmarked)

90 ns
io-ts2.2.22n/aNone
Code snippetCode snippet
const BigIntFromString = new t.Type<bigint, string, string>(name, is, validate, encode);
BigIntFromString.encode(data)

(Setup code is not benchmarked)

72 ns
Code snippetCode snippet
const BigIntFromString = new t.Type<bigint, string, string>(name, is, validate, encode);
BigIntFromString.decode(data)

(Setup code is not benchmarked)

90 ns
zod/mini4.6.5n/aJIT
Code snippetCode snippet
z.encode(codec, data)
105 ns
Code snippetCode snippet
z.decode(codec, data)
117 ns
zod/mini (compile)4.6.5n/aJIT
Code snippetCode snippet
z.encode(compiledCodec, data)
111 ns
Code snippetCode snippet
z.decode(compiledCodec, data)
122 ns
zod4.6.5n/aJIT
Code snippetCode snippet
z.codec(in_, out, { decode, encode }).encode(data)
112 ns
Code snippetCode snippet
z.codec(in_, out, { decode, encode }).decode(data)
119 ns
zod (compile)4.6.5n/aJIT
Code snippetCode snippet
const compiledCodec = z.compile(codec, { strict: true });
compiledCodec.encode(data)

(Setup code is not benchmarked)

119 ns
Code snippetCode snippet
const compiledCodec = z.compile(codec, { strict: true });
compiledCodec.decode(data)

(Setup code is not benchmarked)

116 ns
effect4.0.2n/aNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigIntFromString)(data)
249 ns
Code snippetCode snippet
Schema.decodeSync(Schema.BigIntFromString)(data)
269 ns
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.2n/aNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigIntFromString)(data)
263 ns
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigIntFromString)(data)
299 ns
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.3.36n/aJIT
Code snippetCode snippet
const BigIntFromString = Type.Codec(type).Decode(callback).Encode(callback);
Value.Encode(BigIntFromString, data)

(Setup code is not benchmarked)

3 μs
Code snippetCode snippet
const BigIntFromString = Type.Codec(type).Decode(callback).Encode(callback);
Value.Decode(BigIntFromString, data)

(Setup code is not benchmarked)

3 μs
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser
Code ligatures