JAVA爱家
你与一百万开发人员在一同
Node.js从2009年问世已经开始,到那时已近10岁,在这10年里,它的高速成长和成形是我们毋庸置疑的。它Seiches端精简mammalian程式设计而被高度关注,因做为后端远距应用软件而盛行,因触发器业务流程控制和反弹冥界而被人非议,因npm大批量加装组件而被人崇敬。
做为控制技术应用领域里的歌星工程项目,Node.js自问世年来就始终处在众矢之的其内。上面就来谈谈那些年Node.js被现代人反反复复提出诉讼的“黑料”。
01PART版帝?Node.js 是名符其实的版帝,版预览的确很频密,天数线如下表所示。2013年,正式发布了0.10版。2015年1月,正式发布了1.0.0版(io.js)。2015年5月,正式发布了2.x版(io.js)。2015年8月,正式发布了3.x版(io.js)。2015年9月,Node.js促进会正式发布了5.0版与io.js分拆后的第二个版。2015年10月,Node.js 5.2.0版正式成为第二个LTS(长年全力支持)版。2015年月底,正式发布了5.2.4和5.5.0版。2016年3月,正式发布了5.5.0 LTS版和5.9.0 Stable稳定版。2016年月底,6.0版全力支持95%以上的ES6特性,7.0版通过flag全力支持async函数,全面全力支持99%的ES6特性。2017年2月,正式发布了7.6版,可以不通过flag使用async函数。2017年5月,正式发布了8.0版,全力支持async Hooks,N-API等特性。2018年4月,正式发布了10.0版,新增http2组件,将npm从v5.7预览到了v6,并且增强了对ESMModules的全力支持。2018年10月,正式发布了11.0版,增加了多线程Worker Threads。整体上来说,Node.js的发展趋于稳定。成立Node.js促进会能够让Node.js在未来获得更好的开源社区全力支持;正式发布LTS版意味着Node.js SDK API趋于稳定;频密正式发布版虽然被很多人非议,但换个角度来看,这也是社区活跃的一个体现,如果我们真的看了Changelog,便会发现,新版相比于旧版只增加了一些小的改进,而且是边边角角的改进,也就是说,Node.js的核心代码已经非常稳定了,可以大规模使用。02PART已无性能优势?Node.js在2009年横空出世,可以说靠触发器特性获得了很大的性能优势。所有语言几乎没有能和它相比的。但是福祸相依,因为性能太出众,所以促使很多语言、程式设计模型都纷纷进行改进,比如产生了Go语言,比如PHP里的SWoole框架可以全力支持触发器协程了,再比如鸟哥(惠新宸)对PHP的VM进行了改进,我们似乎都以不全力支持触发器为耻。后来的故事我们都知道了,各种语言的性能都得到了提高。那么在这种情况下,Node.js还有优势吗?在实现难易度上,Node.js除了触发器业务流程掌控稍复杂外,其他的都非常简单。比如在写法上,你可以选择编写面向过程、面向对象、函数式的程序。不要因为Node.js变化快,就觉得自己跟不上潮流。一般后端程序员转为Node.js开发人员时,几乎两周就能精通,这一点相比其他语言却是很有优势的。在调优成本上,Node.js即使不进行优化,性能也非常好,另外,对Node.js进行优化也比其他语言更简单。在学习成本上,Node.js是有优势的。学习其他语言,前后端至少要学两种以上,如果学习Node.js,你只需要学会JavaScript即可,可以少学一种语言。我想问,大后端离得开JavaScript吗?今日的后端还不够复杂吗?你真的有那么多精力学习更多语言吗?其实我们可以高度关注一下基于npm的开源生态,截至2019年3月,npm上已近超过94.7万个组件,“秒杀”无数竞品。npm是所有开源包管理中最强大的,我们说“更了不起的Node.js”,其实npm居功甚伟。下图展示了来自Module Counts的各个包管理组件的差异。npm生态是Node.js的优势,可是说“Node.js没有性能优势”真的对吗?这其实是对Node.js的误解。Node.js的性能依然很好,不断迭代的版其实就是在提升性能。而且Node.js具有npm极其完善的生态,可谓性能与生态双剑合璧,这是无与伦比的。
03PART触发器和反弹冥界正因为触发器特性,Node.jsAPI设计只能采用错误优先(Error-First)风格的反弹约定,于是我们硬生生地把多层反弹写成了反弹冥界(callback hell),这时就有各种“黑粉”冒出来对Node.js进行攻击。
但正是因为反弹冥界是最差的实践,所以我们才不得不求变,于是Thunk函数、Promise/A+规范等相继出现。虽然Promise/A+规范不是那么完美,但对于解决反弹冥界问题来说已经足够。而且Generator特性和Generator的执行环境co组件也被逐渐引入新的触发器解决方案,使得触发器在写法上越来越接近于同步。当async函数落地的时候,Node.js 已经站在了同C#、Python一样的高度上,我们还有什么理由攻击它呢?
上面列举了Node.js全力支持的所有触发器解决方案,并给出了推荐建议(5星为最高级别)。
从推荐指数可以看出,我们应首选async函数,但要注意版问题,要使用最新的版。其次就是Promise,它都能非常好地驾驭callback和async函数,尤其是在异常捕获、扩展上,具有明显的优势。有时,将一件事做到极致,也许能收获另一片天地。触发器业务流程掌控是Node.js程式设计的核心,掌握触发器业务流程掌控之后,Node.js中就只剩API需要学习了,后面会详细讲解。04PART控制技术栈演进自从ES6规范在Node.js中落地之后,整个Node.js开发应用领域都发生了翻天覆地的变化。从v0.10已经开始,Node.js中就逐渐加入了ES6特性,比如Node.js v0.12可以使用Generator,这也促使寻求触发器业务流程掌控的TJ Holowaychuk写出了co这个著名的组件,进而产生了Koa框架。但是在v5.0之前,必须通过flag才能开启Generator支持,因此Koa v1.0迟迟未正式发布,在Node.js v5.0正式发布后,Koa v1.0才正式发布。2015年,传统写法终结;2016年,变革写法已经开始兴起。其中核心变更是全力支持使用ES6语法编写Node.js代码。可以使用Node.js v5.x+里的ES6特性,如果想实现更高级的功能,可以使用Babel编译全力支持ES7特性,或者使用TypeScript。
合理使用Standard或者xo组件代码风格约定。
适当引入ES6语法,只要Node.js SDK内置全力支持的,都可以使用。
我们要重视面向对象写法的使用,虽然ES6的面向对象机制不健全,但以后定会不断完善。面向对象对于大型软件开发更适合,这其实也是我推荐使用TypeScript的原因之一。上面对比了变革前后的控制技术栈选型,希望读者能够从中感受到其中的变化。 狼书一出,Node再无遗册✪Node.js在2009年横空出世时,的确是独一无二的。但在今天,已经10岁的Node.js有了更多、更广泛的应用场景,它的意义已经远远大于设计时的初衷了。随着大后端应用领域的蓬勃发展,跨平台开发、API构建、Web应用开发等场景愈加常见,Node.js也正式成为大后端开发的必备“神器”。
▊ 《狼书(卷2):Node.js Web应用开发》狼叔 著本书主要讲解Node.js Web应用开发涉及的HTTP基础知识、常用开发框架、源码原理、数据库和工程项目实战,旨在向读者展示如何通过Node.js和Koa编写出更具后端特色的Web应用。
Koa立身于最“潮”的触发器业务流程掌控特性,主要用于改进Node.js开发中的反弹冥界痛点,可以说Koa是触发器业务流程掌控不断演进的必然产物。在所有的Node.js Web框架中,Koa无疑是最耀眼的一个。
作 者 简 介
狼叔(网名i5ting),Node.js 控制技术布道者,“Node全栈”公众号作者,全栈控制技术实践者。曾就职于多家知名IT企业,从事后端开发、后端开发、数据分析等工作,目前负责公司内的Node.js开发和基础框架开发工作。
本 书 内 容
本书共分8章,每章的内容简介如下表所示。
第1章 下一代Web框架Koa本章将介绍Koa框架的入门知识、优势、应用场景,Koa脚手架的编写方式,以及Node.js Web框架的演进过程。基于最新的AVA测试框架编写测试用例也是本章非常有特色的一节。第2章 Koa核心扩展机制:中间件
本章将介绍Koa的核心中间件原理,以及Koa中常用的中间件:路由、视图、静态服务组件等。中间件机制是Koa的核心内容,因此本章内容非常重要。
第3章 HTTP必知必会
本章将介绍请求响应模型,也将对HTTP和HTTPS进行讲解,同时以mini-proxy和hiproxy为核心对后端最常用的代理进行讲解。
第4章 Koa练习
本章将结合第3章的HTTP相关知识进行Koa框架内置方法的练习,比如地址解析、参数
第5章 数据库基础
本章将介绍Node.js数据库选型和MVC模型层的用法,以及使用Mongoose组件操作MongoDB的方法,其中涉及Mongoose中的一些进阶技巧:模型扩展、虚拟属性、反弹钩子和插件机制。
第6章 数据库进阶
本章将在第5章的基础上介绍数据库中的进阶技巧:分页、关联查询、事务、性能调优等。通过本章我们能够对Node.js数据库选型掌握得更好。
第7章 后端视图模板
本章将从public目录讲起,介绍后端相关知识,主要涉及模板编译原理、Webpack进阶知识。本章还将介绍前后端分离和服务器端渲染的演进,并提出对未来Serverless环境下后端渲染层的见解。
第8章 工程项目实战
本章将以CNode工程项目为核心,介绍基于Egg.js框架的工程项目代码,还会介绍基于Docker快速开发Node.js Web应用的方法。
————
本书中的各章在内容上基本是相互独立的,因此各位读者可以挑选自己感兴趣的章节阅读。这本书是《狼书》系列图书的第2卷,第1卷主要介绍Node.js基础知识,第3卷主要介绍Node.js高级应用。3卷搭配阅读,效果更好。
福
利
来
了
小编为我们喜爱阅读的书迷们免费送书。
留言点赞送书活动规则
留言点赞:留言分享您对node.js的经验感想,或者其他一些学习经历。
活动参与方法:机会总是靠自己去争取来的!小编将对留言进行精选,被精选的评论将会显示在页面中(由于微信功能限制,最多只能显示100条)。活动截止时获得点赞数最多的前5名朋友获得《狼书(卷2):Node.js Web应用开发》纸质书1本。 扫码或识特别申明:
1、一位用户1个月内只能有1次获奖机会,让更多粉丝受益活动才更有意义
2、每一位用户只有1次留言机会,不允许重复留言~
请我们记住这三个1哦
活动截止天数:2020 年 04 月 02 日16:00 整。
精选书单 点蓝字即可
♡Python对我下手了!如何克服从入门到放弃?
更多好书请高度关注JAVA爱家官方书店