Changes for version 0.04 - 2026-09-05
- 92.3 to 70.6 us per request on a bare application, best of five.
- ADDS: the query string is parsed, percent-decoded and UTF-8 decoded in C. Four pairs 12.90 to 1.29 us, an empty query 1.93 to 0.78. The decoder accepts exactly what Encode accepts, noncharacters included, and hands anything else back to Encode to be refused.
- ADDS: XS constructors for the context, request and response classes, built from a template resolved at seal time. 8.0 to 4.3 us a request. A trigger, a coercion, a failed type check, a missing required attribute, a subclass or an odd argument list takes the stock one.
- ADDS: Catalyst::Seal::Execute. execute reads its stack, state and args as slots rather than through nine accessor calls a time, nine times a request; Catalyst::Action::execute and ::dispatch are XSUBs; use_stats is a constant and depth counts the array in C.
- ADDS: a write through a sealed accessor is answered in XS where the attribute is plain: 132 to 51 ns.
- ADDS: the header pass is in C, 1.54 to 0.94 us.
- FIX: t/lib's /query action called get_all on a plain hash, so both sides died the same way and the query comparisons proved nothing. The parity table now covers separator runs, empty names and values, repeats, isindex, bad escapes, surrogates, overlongs and noncharacters.
- prepare_path reaches the request once instead of five times.
Modules
freeze a Catalyst application at setup and make it 5x faster
XS accessors for the context hot set
constant accessors for class data that stopped changing
two things built per request that need not be
memoise the action lookups that stopped changing
plain eval in place of Try::Tiny on the request path
the nine executions a request makes
the encoding decision, decided once per content type
replace a subroutine and keep the original
make the application class and its components immutable
leaner bodies for the two costly default middlewares
install the composed body of a wrapped method directly
the request preparation path
Provides
in lib/Catalyst/Seal/Middleware.pm