Skip to content

perf: return relaxed header values to the fast scanner - #882

Open
mcollina wants to merge 1 commit into
mainfrom
fix/881-relaxed-header-fast-path
Open

mcollina wants to merge 1 commit into
mainfrom
fix/881-relaxed-header-fast-path

Conversation

@mcollina

Copy link
Copy Markdown
Member

Fixes #881.

The relaxed header-value matcher previously stayed in its own loop, duplicating the ordinary header scanner (including vectorized blocks) in the generated state machine. After accepting a relaxed byte, return to the ordinary header_value scanner. Keep invalid bytes on an error path and cover consecutive relaxed bytes and a bare CR following one.

Local -O3 standalone benchmarks (4 and 32 headers) improved with clang; gcc remains layout-sensitive. For example, one pinned-core 32-header interleaved run measured ~1,470–1,590 ns/request before and ~1,290–1,350 ns/request after with clang. These numbers are machine/compiler dependent.

Validation: npm test (276 passing), npm run lint, npx tsc --noEmit -p tsconfig.json, git diff --check.

@mcollina

Copy link
Copy Markdown
Member Author

@pimterry PTAL

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Parsing is 8-12% slower with clang (and layout-sensitive with gcc) since 9.4.1

2 participants