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是一套成熟的应用开发框架,而不仅仅提供核心模块。
最新评论
- 相关文章
React JSX语法简介
JSX是一种类似XML的标签语法,用来简化代码,我们可以不使用JSX,但了解并使用也没什么坏处:)在React中,JSX是一个使用 React.createElement() API的快捷方式...
函数式JavaScript编程基础概念:Curry和Partial Application
本文介绍JS函数式编程中的两个概念:柯里(Curry)和部分应用程序(Partial Application)。什么是应用程序(Application)将函数应用于其参数以产生返回值的过...
JavaScript语言多编程范式简介
和C++等语言类似,JS支持多范式(paradigms)编程。我们常常混合这些范式来完成一些大型Web项目。JS支持3种编程范式:命令式、面向对象和函数式。命令式(Imperative JavaScript)命令式就是简单的从上而下完成任务,流水账过程式编码风格:function
HTML5动画背后的数学2 - 仿生智能算法综述
三维向量的简单运算和实用意义
在WebGL的实际应用中我们广泛使用向量的几何运算来计算角度、距离,判断点线、点面之间的关系,比如物体之间的碰撞检测。本文简要介绍三维计算机图形学中常用的...
WebGL 纹理映射模式以及WRAP_S | WRAP_T参数详解
我们在纹理滤镜一文中已经说明了2个重要的纹理参数,用来定义对象缩放时纹理的处理方式:GL_TEXTURE_MIN_FILTERGL_TEXTURE_MAG_FILTER本文讲解其余几个纹理参数...
Three.js入门教程5 - 10个必须知道的编程技巧
作者为Google的Paul,关于如何写出好的WebGL代码的文章。和很多开发者一样,我通过实践学习,但同时我也向其他更有经验的开发者们学习。在过去的几个月中,我在c...
CSS3图片混合(Blend)效果及其参考计算公式一览表
在Photoshop软件中,混合是将两个图层的色彩值进行合成,从而创造出大量的效果。在这些效果的背后实际是一些简单的数学公式在起作用。下面所介绍的公式仅适用于R...
WebGL入门教程5 - 详解纹理滤镜(Texture Filter)
WebGL中使用纹理贴图来实现细腻的物体表面观感,其中一个重要的参数是纹理滤镜(Texture Filter)。
这个参数用来处理当对象出现缩放时,纹理如何处理中间...WebGL入门教程2 - GPU基本概念和工作流水线(渲染管道)
Three.js 3D打印数据模型文件(.STL)加载
3D打印是当下和未来10年产品技术主流方向之一,影响深远。对于电子商务类的3D打印网站,一个主要功能是把商品以3D的方式呈现出来,也就是3D数据可视化技术。HTML...
如何使用CSS3实现一个平滑的3D文本标题
要实现3D文本,基本上有3种方法:1. 使用CSS3的投影滤镜(filter: drop-shadow)2. 使用3d建模和CSS3 3d变换来实现(最真实)3. 使用CSS3 text-shadow属性来实现...
div 、section 、article的区别和使用场景
div 、section 、article的区别和使用场景
主要区别,以及适用场合如下:
1、div在html早期版本就支持了,section和article是html5提出的两个雨衣话标... 更多...