Comments (4)
Thanks for the effort you put into this benchmark! I'm broadly aware of this and am working on solutions in Zod 4. There are some very obvious performance in Zod's current parsing pipeline that unfortunately will require breaking changes to fix.
I'll report back with updated performance numbers against this benchmark once Zod 4 is nearing beta.
from zod.
^I made a POC of not using ctx.async
and instead detecting Promises during parsing. Here's the branch https://github.com/jussisaurio/zod/pull/1/files which currently is based on my other zod perf PR (#3487)
Results using your benchmark @warflash :
Benchmarking with 1000 elements
Validation time sync: 25.703ms
Validation time async: 61.169ms
Benchmarking with 10000 elements
Validation time sync: 110.733ms
Validation time async: 641.032ms
Benchmarking with 50000 elements
Validation time sync: 592.054ms
Validation time async: 4.608s
Benchmarking with 100000 elements
Validation time sync: 1.541s
Validation time async: 13.151s
branch:
Benchmarking with 1000 elements
Validation time sync: 20.666ms
Validation time async: 11.56ms
Benchmarking with 10000 elements
Validation time sync: 113.841ms
Validation time async: 100.013ms
Benchmarking with 50000 elements
Validation time sync: 510.81ms
Validation time async: 512.89ms
Benchmarking with 100000 elements
Validation time sync: 1.056s
Validation time async: 1.188s
The reason sync/async are almost the same in the branch is that it doesn't extra wrap any promises. A more comprehensive benchmark would include stuff like async refines to see what the impact is
from zod.
Great, that sounds very nice!
Appreciate the reply and really looking forward to trying out the v4 beta then to see how it performs against our production ingests 😊
from zod.
Wonder if it would work to get rid of ctx.async
and just handle all results from _parse()
as potentially async (i.e. check whether the return value is a Promise
. Currently there seems to be a lot of potentially unnecessary Promise
wrapping just based on ctx.async
from zod.
Related Issues (20)
- Is it possible to create a zod enum from a string literal type HOT 1
- Importing `infer` type makes all props `unknown`? HOT 1
- Zod Preprocess returning unknown type HOT 1
- object.props "required" but z.infer<T> returns "optional" type? HOT 2
- Required key inferred as optional in mutually recursive tree structure HOT 1
- Strip checks and effects
- Zod refine is not working HOT 1
- Type Inference not working HOT 1
- add `actual` for `invalid_string` error in `.regex()` HOT 2
- Add a Real Example of File Upload Validation to Documentation HOT 1
- Recursive types losing types and get `any` HOT 1
- Feature Request: Autoscroll to Input Field on Validation Error HOT 1
- Documentation example for recursive types gives type error
- Does anyone know how to conditionally validate form fields? HOT 1
- [Bug ?] Zod union ignoring zod object when fields are z.optional() HOT 3
- How to use discriminatedUnion with multiple conditions?
- [Bug]: ZodFormattedError type breaks for ReadonlyArrays.
- safeParse not working server sider with z.union() : Error: Attempted to call indexOf() from the server but indexOf is on the client.
- If object with nested refine fails, it doesn't apply transform before superRefine, causing superRefine to not be typesafe
- ZodReadonly missing methods to manipulate schema shape HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zod.