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

    • 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 Date to and from a string (usually an ISO 8601 string, but we don't enforce this).

Copy to clipboardCopy to clipboard
import * as z from "zod"; const dateFromString = z.codec(z.iso.datetime(), z.date(), { encode: (date) => date.toISOString(), decode: (str) => new Date(str), }); dateFromString.encode(new Date(0)); // "1970-01-01T00:00:00.000Z" dateFromString.decode("1970-01-01T00:00:00.000Z"); // Date
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_offNonecodeJITbuildPrecompiled
LibrarysortVersionDownloads (/wk)arrow_upwardOptimizationsEncodesortDecodesort
zod4.4.3181.19MJIT
Code snippetCode snippet
z.codec(...).encode(data)
972 ns
Code snippetCode snippet
z.codec(...).decode(data)
629 ns
zod/mini4.4.3181.19MJIT
Code snippetCode snippet
z.encode(codec, data)
951 ns
Code snippetCode snippet
z.decode(codec, data)
571 ns
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
3.21.215.35MNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.Date)(data)
1 μs
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.Date)(data)
869 ns
effect3.21.215.35MNone
Code snippetCode snippet
Schema.encodeSync(Schema.Date)(data)
1 μs
Code snippetCode snippet
Schema.decodeSync(Schema.Date)(data)
883 ns
effect@beta4.0.0-beta.7015.35MNone
Code snippetCode snippet
// const DateFromString = Schema.Date.pipe(...);
Schema.encodeSync(DateFromString)(data)

(Commented code is not benchmarked)

1 μs
Code snippetCode snippet
// const DateFromString = Schema.Date.pipe(...);
Schema.decodeSync(DateFromString)(data)

(Commented code is not benchmarked)

704 ns
effect@beta (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.0-beta.7015.35MNone
Code snippetCode snippet
// const DateFromString = Schema.Date.pipe(...);
Schema.encodeUnknownSync(DateFromString)(data)

(Commented code is not benchmarked)

1 μs
Code snippetCode snippet
// const DateFromString = Schema.Date.pipe(...);
Schema.decodeUnknownSync(DateFromString)(data)

(Commented code is not benchmarked)

712 ns
io-ts2.2.223.19MNone
Code snippetCode snippet
// const DateFromString = new t.Type<Date, string, string>(...)
DateFromString.encode(data)

(Commented code is not benchmarked)

571 ns
Code snippetCode snippet
// const DateFromString = new t.Type<Date, string, string>(...)
DateFromString.decode(data)

(Commented code is not benchmarked)

261 ns
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.1.382.18MJIT
Code snippetCode snippet
// const DateFromString = Type.Codec(...).Decode(...).Encode(...);
Value.Encode(DateFromString, data)

(Commented code is not benchmarked)

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

(Commented code is not benchmarked)

5 μs
sury11.0.0-alpha.5231.93KJIT
Code snippetCode snippet
// const encoder = S.encoder(S.date, S.string);
encoder(data)

(Commented code is not benchmarked)

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

(Commented code is not benchmarked)

263 ns
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser