The same application, twice

One file, app.js, required once with express and once with fulmine.js. Same views, same static directory, same 1000 routes, same Node, same machine, one nginx in front of both over unix sockets. Each arm uses the middleware its own framework gives it: compression and the timing header are built in on one side and packages on the other.

The route table is the experiment. A router that walks its layers in order costs more the further down the table the answer is; one that indexes them does not. Route 1 is in the list on purpose: it is the one where the two are closest.

Every button sends 20 sequential requests to each arm, one arm after the other, and reports the median. Nothing runs under load and nothing here is a throughput benchmark: the ones that are, with their controls, live in the repository. to the head is each arm timing itself up to the response head, Server-Timing on one side and X-Response-Time on the other, so serialising the body is inside it and the network is not. end to end is this page timing the whole exchange, network included, which is what a compressed body has to be compared with: the two compressors write the head at different points in the work, so their own numbers stop after different amounts of it.