express micro vertx 三大框架对比

介绍

Express:

Express诞生已久,是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能,使用人数众多。

Micro:

Micro 和 Next.js 出自于同一家公司,是一个异步的 ES6 HTTP 微服务框架,这个框架简单、快速、没有中间件的依赖,而且官方针对一些功能写成第三方的包,按需使用,保证了项目的简洁性。

Vert.x:

Vert.x是一个基于JVM、轻量级、高性能的应用平台,非常适用于最新的移动端后台、互联网、企业应用架构。Vert.x基于全异步Java服务器Netty,并扩展出了很多有用的特性。而且可使用多种语言编写应用,如Java, JavaScript, CoffeeScript, Ruby, Python 或 Groovy等等。

框架响应速度对比

express 1000个请求 100个并发的请求:

吞吐率:1443.27 个请求每秒
平均用户的等待时间:69.287 毫秒
服务器平均处理时间:0.693毫秒

express 1000个请求 100个并发的请求

Micro 1000 个请求 100个并发的速度:

吞吐率:2230.24个每秒钟
平均用户等待时间:44.838 毫秒
服务器平均处理时间:0.448

Micro 1000 个请求 100个并发的速度

Vertx 1000 个请求 100个并发的速度

吞吐率:557.67 个每秒钟
平均用户等待时间:179.318 毫秒
服务器平均处理时间:1.793 毫秒

Vertx 1000 个请求 100个并发的速度

小结

框架渲染 “hello world” 字符串总结
| 框架名 | 吞吐率 | 平均用户等待时间 | 服务器平均处理时间 |
| ————- |:————-:|:————-:|:————-:|
| Express | 1443.27 个每秒 | 60.287ms | 0.693ms |
| Micro | 2230.24个每秒 | 44.838ms | 0.448ms |
| Vertx | 557.67 个每秒 | 179.318ms | 1.793ms |

从吞吐率和平均用户等待时间和服务器平均处理时间来看,Micro 框架要胜于express,更要远胜于 Vertx.x,得益于 Micro 更加精简的代码。

框架模板渲染速度对比

Express 模板渲染(1000个请求 100个并发)

吞吐率:457.23 个每秒钟
平均用户等待时间:218.708 毫秒
服务器平均处理时间:2.187 毫秒

Express 模板渲染(1000个请求 100个并发)

Micro 模板渲染(1000个请求 100个并发)

吞吐率:536.35 个每秒钟
平均用户等待时间:186.446 毫秒
服务器平均处理时间:1.864 毫秒

Micro 模板渲染(1000个请求 100个并发)

Vertx 模板渲染(1000个请求 100个并发)

吞吐率:405.18 个每秒钟
平均用户等待时间:246.803 毫秒
服务器平均处理时间:2.468 毫秒

Vertx 模板渲染(1000个请求 100个并发)

小结

框架渲染模板,渲染出“hello world” 总结
| 框架名 | 吞吐率 | 平均用户等待时间 | 服务器平均处理时间 |
| ————- |:————-:|:————-:|:————-:|
| Express | 457.23 个每秒 | 218.708ms | 2.187ms |
| Micro | 536.35个每秒 | 186.446ms | 1.864ms |
| Vertx | 405.18 个每秒 | 2.468ms | 2.468ms |

不管是从单独的访问一个页面也好,还是通过模板渲染,miscro 的效率更高,用户处理数也更强,express 相对来说次之,vertx 显得稍微有点慢和用户处理数少。

构建服务最简代码

Express

1
2
3
4
5
6
7
8
9
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});

Micro

1
module.exports = (req, res) => { res.end('Welcome to Micro') }

Vertx

1
2
3
4
5
6
7
8
9
10
11
vertx.createHttpServer().requestHandler(router.accept).listen(8080);
var server = vertx.createHttpServer();
server.requestHandler(function (request) {
var response = request.response();
response.putHeader("content-type", "text/plain");
response.end("Hello World!");
});
server.listen(8080);

小结

Miscro 构建一个服务器是最简单的,只需要一行代码,就能够启动一个服务,端口号是默认的3000,如果需要更改端口号,可以通过在启用的时候制定端口号,express 和 vertx 相对来说都使用了8行代码,相对来说繁琐一些。

路由处理

Express

1
2
3
4
5
6
7
8
9
10
11
12
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('get');
});
router.post('/about', function(req, res) {
res.send('About post');
});
module.exports = router;

Micro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const { send } = require('micro')
const { router, get, post } = require('microrouter')
const hello = (req, res) =>
send(res, 200, 'Hello World')
const about = (req, res) =>
send(res, 200, 'about post')
module.exports = router(
get('/', hello),
post('/post', about)
)

Vertx

1
2
3
4
5
6
7
8
9
10
11
12
13
var Router = require("vertx-web-js/router");
var router = Router.router(vertx);
router.get("/").handler(function (routingContext) {
var response = routingContext.response();
response.write('Hello World').end();
});
router.post("/about").handler(function (routingContext) {
var response = routingContext.response();
response.write('About post').end();
});

小结

从路由处理上来看,miscro 如果要处理 404 错误,需要自己写逻辑代码,而且会将好多路由放到一个文件中去维护,维护还算方便,express 和 vertx 都是每个路由单独处理,差别不大

流行程度(7月12日数据)

Express

Express

Micro

Micro

Vertx

Vertx

小结

从 start 来看,express 无疑是最多的,甚至不管是watch还是fork,都是老大,vertx.x 是第二,不过 vertx.x 是包括 java , javascript, ruby 等等语言一起。express 从 2009 年6月 21 日创建 到 2017 年 7月 12 日,共 2943 天,每天平均增长 11.15,micro 从 2016 年4月24日到 2017年7月12日 共444,每天平均增长9.52,vertx 从 2013年7月21日到2017年7月12日,共1453,每天平均增长4.34,增长速度来看 express 增长最快,micro 次之

最近的一次更新

Express

Express

Micro

Micro

Vertx

Vertx

小结

Express 在最近的两个月前更新过,micro 在 7 天前更新,vertx 在2天前更新,但是从提交的数量和参与的数量来看,express 是提交数量最多,参与人数最多的,vertx 次之

第三方的包

Express

兼容性好,基本上的中间件都可以引入使用,有些包作为中间件来使用,十分方便。

Micro

兼容性好,基本上的中间件都可以引入使用。

Vertx

因为是基于 java 代码上的二次封装,所以很多中间件兼容性不好,需要进行二次改造才能使用。

个人开发感受

Express

express 是一个大而全的框架,基本上你需要东西都有,只是需要自己去寻找,去比较,然后选择自己合适的。用户的基数也大,你踩过的坑,很多人也踩过,所以相对来说,出现问题都有相应的解决方案。框架基本上是全能的,不管是作为建设网站来用,还是作为 api 来使用都能适应,而且框架相对来说简单,学习成本也低。整个框架是线性逻辑,通过中间件形式把业务逻辑细分、简化,一个请求进来经过一系列中间件处理后再响应给用户,清晰明了。

Micro

Micro 是一个微服务的框架,框架代码少,所以性能都很不错,而且是最近一年新出的框架,所以都包含着新的特性,使用起来感觉很爽。而且官方对路由、http等服务封装了相应的包,所以是按需取用,这对整个项目的大小可以进行控制

Vertx

Vertx 本身是非常强大的,而且支持多个语言,在多语言的团队中是非常好的一个利器,而且本身的生态非常好,各种项目中需要用的功能官方都有提供,非常的强大,但是有一个致命的缺点,就是兼容性不够好,很多第三方的包不能够支持,需要自己根据 Vertx 的代码进行修改和调整,这一块的成本是很高的。

总结

Express

Express是一个全能的框架,我觉得团队在以下几点可以考虑这个框架:

  1. 团队在 node 这一块经验不是很丰富,需要一个框架来快速构建node应用
  2. 团队需要一个比较成熟的解决方案,不太想冒各种风险
  3. 团队用node来构建页面服务,也需要用node来构建接口
  4. 团队感觉选择框架的时候有选择综合征,准备随便选一个

这几点这个框架不合适:

  1. 针对 Express 的错误处理有点不适合,不认同也不认可
  2. 项目性能要求高,希望尽可能的达到快速
  3. 喜欢简洁的框架
  4. 需要自己能够完全控制整个项目

Micro

Micro 是一个轻量级的微服务框架,团队在以下几点可以考虑这个框架:

  1. 团队只需要构建一个微服务框架,不需要涉及其他东西
  2. 团队的项目对性能要求高
  3. 团队希望能够尽可能的使用JS的新特性
  4. 团队需要自己能够完全控制整个项目

以下几点不合适:

  1. 想要整个项目打包成一个文件
  2. 项目的涉及面广且大
  3. 项目的希望是一个全能的框架

    Vertx

Vertx 是一个生态非常好的框架,团队在以下几点可以考虑这个框架:

  1. 整个团队是多个语言混合的团队
  2. 团队使用其他语言(特别是java)的偏多,node 只在某个特定的场合使用
  3. 团队的node应用在vertx生态中就能满足,不需要第三方的包

以下几点不合适:

  1. 需要第三方的包
  2. node在整个项目是主角,其他语言是辅助的
  3. 团队java语言基础薄弱