2019年NodeJS框架Koa和Express选型比较
Koa和Express都是NodeJS的主流应用开发框架。
Express是一个完整的nodejs应用框架。Koa是由Express团队开发的,但是它有不同的关注点。Koa致力于核心中间件功能。nodejs中间件是访问请求对象(req)和响应对象(res)的例程。这些例程在路由处理程序之前被调用,因此它们位于客户端与生成响应的路由逻辑的“中间”。nodejs应用程序可以将中间件例程“链接”到自定义请求/响应管道中。管道可以根据请求和响应进行操作,包括头和主体。Express和Koa都包含中间件,但实现方法却截然不同。
核心Koa模块只是中间件内核。而Express包含一个完整的应用程序框架,具有路由和模板等功能。Koa确实有这些功能的选项,但它们是单独的模块。因此,Koa的模块化程度更高;您只需包含所需的模块即可。核心KOA模块只有大约2千行代码,因此,如果您只需要核心请求应答上下文对象,则Koa占用空间非常小。相比较而言,Express较为庞大,内置了一整套中间件功能,好处是对于大部分应用场合你可以省掉自己选择和组合模块的时间。
Koa对Express进行了扩展,并充分利用了ES7新的语法。Koa的Context对象是对Express核心请求和应答对象的扩展,另外利用async/await来消除回调(callback)陷阱。
回调的语法类似如下:
function myFunction(params, callback){ //make async call here asyncCall(params, function(res) { callback(res); }) } myFunction(myParams, function(data){ //do something with 'data' here })
异步语法async/await类似如下:
async myFunction(){ try { let res = await asyncCall(); return res; } catch(err){ console.log("Error: " + err); } } let result = await myFunction();
回调陷阱(大量嵌套的回调函数)问题这里略过,写过大型JS应用的,应该都深有体会,下面的async/await语法除了执行顺序更加清楚之外,异常处理也更容易。对异步问题的处理方式是Koa和Express两者一个显著区别。
关于性能,这两个框架相差无几,Koa略好,这里略过具体的测试用例了,基本上都能达到几千req/s。
最后简单总结下,如何选型:
如果是新项目,运行环境对ES7语法没有限制,对性能比较看重,团队有较高的定制化需求和技能,那么优先选择Koa;
如果是Express的老项目,那么建议继续使用Express,没必要只是为了用新技术而来迁移,Koa和Express也不那么兼容;
如果你不想自己选择和搭建各种模块组件并有可能需要处理兼容问题,而喜欢一体的、快速集成开发,那么选择Express,Express是一套成熟的应用开发框架,而不仅仅提供核心模块。
最新评论
- 相关文章
3D感知和建模关键硬件技术:双目、3D结构光和TOF
无论VR、AR和3D打印,其核心技术包含3D成像和建模。而3D建模属于劳动密集型的工作,耗时耗力,凡这类工作都会是被新技术革命的地方,自动3D建模技术就是为了解决...
常用光照类型基本概念工作原理及其计算公式
在三维场景中,原理上物体的渲染效果取决于光照与物体表面的相互作用,对于渲染程序而言,可以通过把一些数学公式应用于像素着色来实现,从而模拟出真实生活中的...
NodeJS、Java和PHP性能考量和若干参考结论
首先需要说明的是,严格而言NodeJS和Java、PHP并非对等概念,NodeJS是基于JS的一个应用程序,而Java/PHP是语言。我们这里实际指的是分别使用node、java和php来实...
深入理解CSS3滤镜(filter)功能和实例详解
CSS3滤镜功能源自SVG滤镜规范,SVG滤镜最早用来给矢量图添加类似PS中像素图的一些特效。
把这个滤镜功能引入到普通HTML元素中可以带来很有趣的效果(模糊、...HTTP/2背景和新特性简介
Three.js入门教程2 - 着色器(下)
这是WebGL着色器教程的后半部分,如果你没看过前一篇,阅读这一篇教程可能会使你感到困惑,建议你翻阅前面的教程。
Three.js入门教程1 - 基础知识和创建一个红色球体
[ TECHBROOD注:Three.js是一个主流的开源WebGL库,WebGL允许使用JavaScript直接操作GPU,在网页上实现3D效果。
Google的工程师Paul在网站aerotwist.com上...WebGL入门教程1 - 3D绘图基础知识
现代浏览器努力使得Web用户体验更为丰富,而WebGL正处于这样的技术生态系统的中心位置。其应用范围覆盖在线游戏、大数据可视化、计算机辅助设计、虚拟现实以及数...
使用Canvas绘制完美的不完美圆形
真实世界是不完美的,当我们需要模拟真实世界时,经常需要引入不完美/不规则的形状。比如陨石、雨滴、行星、树叶、绵延的海岸线、云朵等。本文介绍如何基于Canva...
如何基于Canvas来模拟真实雨景Part2:重力掉落和雨滴融合
使用top/left/margin和CSS3 translate两种方法实现标题居中的性能差异详解
要实现标题全屏居中(同时在垂直和水平方向居中),有若干种方法,包括使用弹性布局、表格单元、绝对定位、自动外边距和CSS3平移变换等。你可能已经使用了这些方...
Canvas实例教程:图像移动、大小调整和裁剪
本文介绍如何使用JavaScript和HTML5 Canvas元素来移动、调整大小和...
在PHP网页程序中执行Sass/Compass命令
我们需要在wow云开发平台支持sass/compass等预编译样式语言,为此我们首先尝试了scssphp扩展,但是在支持最新语法上,经常会出现异常。所以我们采用了代理的方式...
更多...