这个框架在 connect
的基础上对 req
和 res
增加了更多的属性的方法,它既有 express
风格,也有 koa
风格,同时支持绝大多数 connect
和 express
所支持的中间价/插件。
它体积非常小,但功能并不少,koa
有的,它基本都有,express
有的,也大多有,除了路由(当然已经有第三方的 connect
模块对其提供)。
connect
的文档有点缺少并且错误,因此这个框架自己提供了一个 .d.ts
文件,来提供完整的 IDE 支持。
示例:
const { App } = require("./index");
const http = require("http");
var app = new App();
app.use((req, res) => {
// Print out some request imformation:
console.log("Client IP:", req.ip);
console.log("Requested href:", req.href);
console.log("Requested hostname:", req.hostname);
console.log("Accepted Language:", req.lang);
// Set some response information.
res.cookies.username = "Luna";
res.refresh = 5; // refresh the page every 5 seconds.
res.send("<p>Hello, World!</p>"); // text/html;
}).listen(80);
在性能上,下面是 JMeter 压力测试的结果:
webium.res.end:
10000 in 00:00:06 = 1721.8/s Avg: 292 Min: 1 Max: 2207 Err: 546 (5.46%)
webium.res.send:
10000 in 00:00:07 = 1456.9/s Avg: 368 Min: 2 Max: 2294 Err: 906 (9.06%)
express.res.end:
10000 in 00:00:06 = 1572.8/s Avg: 336 Min: 1 Max: 1970 Err: 706 (7.06%)
express.res.send:
10000 in 00:00:07 = 1456.2/s Avg: 356 Min: 2 Max: 2187 Err: 841 (8.41%)
koa.ctx.body:
10000 in 00:00:06 = 1738.2/s Avg: 263 Min: 1 Max: 2133 Err: 360 (3.60%)
connect.res.end:
10000 in 00:00:05 = 2066.1/s Avg: 210 Min: 0 Max: 2127 Err: 208 (2.08%)
由于 webium 对某些属性进行了预计算,因此在 Hello, World!
这些简单响应中会比 koa
稍差一些,但在更复杂的场景下,它会比每一次使用都重新计算的的 koa
表现要好些。
同时,webium 的 res.send()
放大,提供更多的类型检测,能够自动判断响应的字符串是 HTML 还是 XML, 或者 JSON,并且,沿袭 express 的风格,在处理相同的响应内容时,发送 304 响应,而不是 200。
GitHub: https://github.com/Hyurl/webium
可是 express 和 koa 的风格完全不一样,你这个不是 express的风格么?