c6c375c252
Had to un-indent text for the GFM markdown to accept the table. Not sure what to do with rest of the file, so I'll leave it open. `benchmark/` probably needs some love if we expect it to generate similar output. Even without it, I still think the most readable for end-users. is the best possible result.
84 lines
2.6 KiB
Markdown
84 lines
2.6 KiB
Markdown
THIS DOCUMENT IS IN PROGRESS. THIS PARAGRAPH SHALL BE REMOVED WHEN THIS DOCUMENT IS DONE.
|
|
|
|
TO DO:
|
|
|
|
- Remove benchmark from readme
|
|
|
|
# Koa vs Express
|
|
|
|
## Does Koa replace Express?
|
|
|
|
It's more like Connect, but a lot of the Express goodies
|
|
were moved to the middleware level in Koa to help form
|
|
a stronger foundation. This makes middleware more enjoyable
|
|
and less error-prone to write, for the entire stack, not
|
|
just the end application code.
|
|
|
|
Typically many middleware would
|
|
re-implement similar features, or even worse incorrectly implement them,
|
|
when features like signed cookie secrets among others are typically application-specific,
|
|
not middleware specific.
|
|
|
|
## Does Koa replace Connect?
|
|
|
|
No, just a different take on similar functionality
|
|
now that generators allow us to write code with less
|
|
callbacks. Connect is equally capable, and some may still prefer it,
|
|
it's up to what you prefer.
|
|
|
|
## Why isn't Koa just Express 4.0?
|
|
|
|
Koa is a pretty large departure from what people know about Express,
|
|
the design is fundamentally much different, so the migration from
|
|
Express 3.0 to this Express 4.0 would effectively mean rewriting
|
|
the entire application, so we thought it would be more appropriate
|
|
to create a new library.
|
|
|
|
## Is Koa faster than Express?
|
|
|
|
Koa and Express have very similar benchmark results, both of which are more than enough for most applications. This is especially true for applications with high traffic running multiple instances, because you are scaling horizontally right?
|
|
|
|
The following results were produced on a Retina Macbook Pro, showing only the cost of running noop middleware.
|
|
|
|
| no. middleware | Koa | Express |
|
|
| --------------:| ------- | ------- |
|
|
| 1 | 8849.36 | 7805.19 |
|
|
| 5 | 8685.74 | 7707.15 |
|
|
| 10 | 8511.08 | 7475.08 |
|
|
| 15 | 8456.86 | 7261.73 |
|
|
| 20 | 8211.93 | 7012.07 |
|
|
| 30 | 8102.98 | 6672.76 |
|
|
| 50 | 7617.67 | 6255.92 |
|
|
| 100 | 6899.45 | 5000.98 |
|
|
|
|
## How is Koa different than Connect/Express?
|
|
|
|
### Generated-based control flow
|
|
|
|
Thanks to co.
|
|
|
|
No callback hell.
|
|
|
|
Better error handling through try/catch.
|
|
|
|
No need for domains.
|
|
|
|
### Koa is barebone
|
|
|
|
Unlike both Connect and Express, Koa does not include any middleware.
|
|
|
|
Unlike Express, routing is not provided.
|
|
|
|
Unlike Express, many convenience utilities are not provided. For example, sending files.
|
|
|
|
More modular.
|
|
|
|
### Koa relies less middleware
|
|
|
|
For example, instead of a "body parsing" middleware, you would instead use a body parsing function.
|
|
|
|
### Koa abstracts node's request/response
|
|
|
|
Less hackery.
|
|
|
|
Proper stream handling.
|