基于 connect 的 web 应用程序框架 webium
发布于 3 个月前 作者 Hyurl 549 次浏览 来自 分享

这个框架在 connect 的基础上对 reqres 增加了更多的属性的方法,它既有 express 风格,也有 koa 风格,同时支持绝大多数 connectexpress 所支持的中间价/插件。

它体积非常小,但功能并不少,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 表现要好些。

同时,webiumres.send() 放大,提供更多的类型检测,能够自动判断响应的字符串是 HTML 还是 XML, 或者 JSON,并且,沿袭 express 的风格,在处理相同的响应内容时,发送 304 响应,而不是 200。

GitHub: https://github.com/Hyurl/webium

1 回复

可是 express 和 koa 的风格完全不一样,你这个不是 express的风格么?

回到顶部