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)sortOptimizationsEncodearrow_upwardDecodesort
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
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
zod/mini4.4.3181.19MJIT
Code snippetCode snippet
z.encode(codec, data)
951 ns
Code snippetCode snippet
z.decode(codec, data)
571 ns
zod4.4.3181.19MJIT
Code snippetCode snippet
z.codec(...).encode(data)
972 ns
Code snippetCode snippet
z.codec(...).decode(data)
629 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
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
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
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser