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

    • 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
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
LibrarysortVersionDownloads (/wk)sortOptimizationsEncodearrow_upwardDecodesort
sury11.0.0-alpha.11n/aJIT
Code snippetCode snippet
// const encoder = S.encoder(S.bigint, S.string);
encoder(data)

(Commented code is not benchmarked)

84 ns
Code snippetCode snippet
// const decoder = S.decoder(S.string, S.bigint);
decoder(data)

(Commented code is not benchmarked)

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

(Commented code is not benchmarked)

90 ns
Code snippetCode snippet
// const BigIntFromString = new t.Type<bigint, string, string>(...)
BigIntFromString.decode(data)

(Commented code is not benchmarked)

129 ns
zod/mini4.4.3n/aJIT
Code snippetCode snippet
z.encode(codec, data)
157 ns
Code snippetCode snippet
z.decode(codec, data)
215 ns
zod4.4.3n/aJIT
Code snippetCode snippet
z.codec(...).encode(data)
170 ns
Code snippetCode snippet
z.codec(...).decode(data)
207 ns
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
3.22.0n/aNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigInt)(data)
352 ns
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigInt)(data)
436 ns
effect3.22.0n/aNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigInt)(data)
367 ns
Code snippetCode snippet
Schema.decodeSync(Schema.BigInt)(data)
422 ns
effect@beta (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.0-beta.101n/aNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
effect@beta4.0.0-beta.101n/aNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeSync(Schema.BigIntFromString)(data)
2 μs
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.3.8n/aJIT
Code snippetCode snippet
// const BigIntFromString = Type.Codec(...).Decode(...).Encode(...);
Value.Encode(BigIntFromString, data)

(Commented code is not benchmarked)

5 μs
Code snippetCode snippet
// const BigIntFromString = Type.Codec(...).Decode(...).Encode(...);
Value.Decode(BigIntFromString, data)

(Commented code is not benchmarked)

5 μs
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser
Code ligatures