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是一套成熟的应用开发框架,而不仅仅提供核心模块。
最新评论
- 相关文章
Monaco Editor 编辑器拷贝粘贴功能调用和获取选中文本
有时候需要在monaco editor外部调用编辑器的内置功能比如希望在页面主工具栏实现一些快捷操作。button
HTML5 And Canvas 2D Specs Are Now Feature Complete, First HTML 5.1 Working Draft Published
We’ve been writing about HTML5 for quite a while, but, until today, the actual HTML5 specs and standards were still moving targets. Now, however, the...
Blender2.7给平面模型添加纹理贴图
在blender中给模型添加纹理,需要有2个步骤:首先在对象属性栏中给该对象添加材料和纹理建立纹理映射添加材料和纹理这是常见操作,略过步骤。但是仅仅这样操作,...
Web界面编程状态变化和JS开发框架(React/Angular/Ember)
UI编程中的一个关键课题就是界面组件化(可复用)以及组件状态管理。稍早一些的windows程序员可能接触过MFC,其界面编程中有一个DDX(DoDataExchange)的机制,...
CSS3弹性布局弹性流(flex-flow)属性详解和实例
弹性布局是CSS3引入的强大的布局方式,用来替代以前Web开发人员使用的一些复杂而易错hacks方法(如使用float进行类似流式布局)。其中flex-flow是flex-direction...
深入理解CSS3滤镜(filter)功能和实例详解
CSS3滤镜功能源自SVG滤镜规范,SVG滤镜最早用来给矢量图添加类似PS中像素图的一些特效。
把这个滤镜功能引入到普通HTML元素中可以带来很有趣的效果(模糊、...WebGL 纹理映射模式以及WRAP_S | WRAP_T参数详解
我们在纹理滤镜一文中已经说明了2个重要的纹理参数,用来定义对象缩放时纹理的处理方式:GL_TEXTURE_MIN_FILTERGL_TEXTURE_MAG_FILTER本文讲解其余几个纹理参数...
Three.js入门教程4 - 创建粒子系统动画
嗨,又见面了。这么说我们已经开始学习Three.js了,如果你还没有看过之前三篇教程,建议你先读完。如果你已经读完前面的教程了,你可能会想做一些关于粒子的东西。让我们直面这个话题吧,每个人都爱粒子效果。不管你是否知道,你可以很轻易地创建它们。
Three.js入门教程2 - 着色器(上)
如何实现SVG clipPath自适应被裁剪对象
CSS3中引入的clip-path(裁剪路径)属性是一个很强大的特性。
clip-path的含义如下图所示,好比剪纸一样,你用剪刀沿着某条路径把目标对象(图像或元素)裁...WebGL入门教程2 - GPU基本概念和工作流水线(渲染管道)
使用top/left/margin和CSS3 translate两种方法实现标题居中的性能差异详解
要实现标题全屏居中(同时在垂直和水平方向居中),有若干种方法,包括使用弹性布局、表格单元、绝对定位、自动外边距和CSS3平移变换等。你可能已经使用了这些方...
如何使用CSS3/SCSS实现逼真的车窗雨滴效果
在天气预报类的Web移动应用中,常常需要实现屏幕的雨滴效果,表示阴雨天气。感觉上比较神奇,其实想通了,这个效果的实现只需要一点物理知识和CSS3的简单变换。实现一个小雨滴首先雨滴是一个个小的椭圆形元素:.raindrop
更多...