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.0538.18KJIT
Code snippetCode snippet
const encode = S.encodeOrThrow(S.bigint, S.string);
encode(data)

(Setup code is not benchmarked)

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

(Setup code is not benchmarked)

120 ns
io-ts2.2.223.67MNone
Code snippetCode snippet
const BigIntFromString = new t.Type<bigint, string, string>(name, is, validate, encode);
BigIntFromString.encode(data)

(Setup code is not benchmarked)

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

(Setup code is not benchmarked)

125 ns
zod/mini4.6.5387.37MJIT
Code snippetCode snippet
z.encode(codec, data)
140 ns
Code snippetCode snippet
z.decode(codec, data)
173 ns
zod/mini (compile)4.6.5387.37MJIT
Code snippetCode snippet
z.encode(compiledCodec, data)
146 ns
Code snippetCode snippet
z.decode(compiledCodec, data)
157 ns
zod4.6.5387.37MJIT
Code snippetCode snippet
z.codec(in_, out, { decode, encode }).encode(data)
148 ns
Code snippetCode snippet
z.codec(in_, out, { decode, encode }).decode(data)
169 ns
zod (compile)4.6.5387.37MJIT
Code snippetCode snippet
const compiledCodec = z.compile(codec, { strict: true });
compiledCodec.encode(data)

(Setup code is not benchmarked)

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

(Setup code is not benchmarked)

160 ns
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.151.26MNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigIntFromString)(data)
322 ns
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigIntFromString)(data)
356 ns
effect4.0.151.26MNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigIntFromString)(data)
329 ns
Code snippetCode snippet
Schema.decodeSync(Schema.BigIntFromString)(data)
336 ns
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.3.3615.54MJIT
Code snippetCode snippet
const BigIntFromString = Type.Codec(type).Decode(callback).Encode(callback);
Value.Encode(BigIntFromString, data)

(Setup code is not benchmarked)

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

(Setup code is not benchmarked)

4 μs
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser
Code ligatures