diff --git a/benchmark/scenarios/body-json-512kb.js b/benchmark/scenarios/body-json-512kb.js new file mode 100644 index 00000000..1b8c6da6 --- /dev/null +++ b/benchmark/scenarios/body-json-512kb.js @@ -0,0 +1,28 @@ +'use strict'; + +// The other body-parser scenario posts 57 bytes, which uWS hands over in a single +// chunk, so it never exercises the accumulate path. This one is large enough to +// arrive in several chunks and makes the cost of collecting a body visible. +const PAD = 512 * 1024; + +module.exports = { + name: 'middlewares/body-json-512kb', + path: '/abc', + wrk: { + script: 'post-json-512kb.lua', + connections: 50 + }, + verify: { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ n: 1, pad: 'x'.repeat(PAD) }) + }, + setup(app, express) { + app.use(express.json({ limit: '10mb' })); + app.post('/abc', (req, res) => { + res.send(`${req.body.pad.length}`); + }); + } +}; diff --git a/benchmark/wrk-scripts/post-json-512kb.lua b/benchmark/wrk-scripts/post-json-512kb.lua new file mode 100644 index 00000000..41686fe4 --- /dev/null +++ b/benchmark/wrk-scripts/post-json-512kb.lua @@ -0,0 +1,7 @@ +wrk.method = "POST" +wrk.path = "/abc" +wrk.headers["Content-Type"] = "application/json" + +local kb = 1024 +local pad = string.rep("x", 512 * kb) +wrk.body = '{"n":1,"pad":"' .. pad .. '"}'