Thanks for putting this together!
For schema, I think using `s/validate` is not a fair comparison with the other libraries -- as you mention, it throws an exception on error, and it also has to parse the schema each time.
I think `s/checker` is the correct construct to use here -- it returns an error or nil for success (no exceptions), and only parses the schema once. (This is what's used by `s/defn`, for example).
Here's a pull request that implements this change:
I posted the updated results in the PR comments as well, which are qualitatively quite different from the ones currently reported in your blog post (with this change, schema is fastest on all but one benchmark, often by a factor of 3 or more).
Please let me know if you have any questions.
Thanks,
Jason