Koa vs Express && Koa1 vs Koa2

Koa vs Express

鉴于已选定 Koa 框架,故对 Express 未做深入学习,只是大致的了解了后作出的对比总结

相同点

  • 本是同根生,相煎何太急
  • 构建 web 应用的 node 框架
  • 某些语法也无太大区别,如创建 http 服务 app.listen()

不同点

  • 概述:
    • Express: 框架内容更丰富,有更大的社区,历史更悠久,文档更丰富,用户群更大,支持 jade 等前端模板语言
    • Koa: 更小、更富有表现力、更健壮,还未完全成熟、稳定,中间件的使用和编写相对更容易
  • 重点:Koa 支持 es6 语法
  • 理念:
    • Koa 在内核方法中不绑定任何中间件,不提供路由功能,不提供某些工具,如: sending file
    • Express otherwise
  • 编程方式:
    • Koa 摒弃了‘被人诟病’的回调,采用 generator 的方式
    • Context:Koa 对 request 和 response 进行了封装,使用方式也相应改变
      • Koa: this.body = ‘hello world’
      • Express: res.send(‘Hello world’)
    • 错误处理:
      • Koa: 有默认的错误处理方式
      • Express: 没有统一的错误处理

下面是官网对 Koa 和 Express 做出的对比

选项 Koa Express
Middleware Kernel
Routing
Templating
Sending Files
JSONP

尽管如此,Koa 却有丰富的中间件,比如 koa-routing, koa-jsonp 能实现需要的功能

个人感受

  • Koa 提供了更优于 Express 的错误处理
  • Koa 对 request 和 response 的封装,号称提高了体验,但个人感觉,体验这个东西,仁者见仁
  • Koa 让程序员摆脱”回调函数地狱”,但是作为前端程序员回调应该是必修课,并且虽然出现了 es6,但在现在的工作中回调依然是主调
  • 尽管如此,Koa 依然表现出丰富和强大,

Koa1 vs Koa2

Koa2 目前还处于 alpha 版本,需要 node version 7.6.0 以上的支持,否则需要使用 babel 进行转译

  1. 中间件的使用上
    • Koa1: 依赖 co 并采用 generator 函数,在函数内使用 yield 语句
    • Koa2: 增加了箭头函数,移除了 co 依赖,使用 Promise, 因此可以结合 async, await 使用
  2. 中间件的支持上
    • Koa1: 明显可使用的中间件更多
    • Koa2: 中间件不如 Koa1 丰富
    • 具体中间件列表可以看这里
  3. context 对象的获取上
    • Koa1: this 对象,this.req, this.res
    • Koa2: cxt 参数,cxt.req, cxt.res

下面是约4个月前,网上有人做的 Koa1, Koa2, Express 压力测试对比数据(点击查看github 项目

可以大体看出,Koa2 在压测性能方面比起 Koa1 有一定的优势

个人结论:

  • Koa2 使用的 Promise 编程方式,似乎比 Koa1 更简明扼要,但是依然,这是个仁者见仁、智者见智的问题
  • 目前很多的中间件能很好的 Koa1,但是对 Koa2 的支持不够好
  • 就长远目标来看,Koa2 应该是会发展并逐步代替 Koa1 的,要不开发 Koa2 做什么?
  • 但 Koa2 目前尚未稳定,不确定现在使用的 Koa2 将来会不会迎来巨变
  • 而相应的,对 Koa1 的中间件而言,官方提供了 koa-convert 将 Koa1 的中间件转换为适用于 Koa2 的中间件,在一定程度上会减少将来可能面临的 从 Koa1 到 Koa2 的工作

猜你喜欢

转载自blog.csdn.net/zramals/article/details/80653715