Node.js + TypeScript
开发服务端是什么样的体验,和传统的服务端语言Java
有什么不一样,我来讲几点个人感觉。
Node.js
和传统的后端语言 Java
在设计上是有很大区别的。一个是动态语言,一个是静态语言;一个是单线程模型,一个是多线程模型。npm
Node.js
其实不是一门语言,它是 Javascript
的服务器运行时环境, 在它出现以前 Javascript
只能运行在浏览器中。在这里咱们也能够这么说:Node.js
就是能够写服务端的Javascript
。编程
Node.js
是单线程模型,而且是事件驱动和异步I/O(底层是基于c语言实现的libuv库
),这个是它最基本的特色,和它类似的是Nginx。这个特色决定来它适合的场景:I/O密集、少计算的应用。后端
举个例子:Node.js
的线程模型就像是麦当劳店里面的负责下单的服务员,客人排队下单,每一个客人下完单就在旁边等餐,服务员则继续为下一个客人下单。同时,期间若是发现餐柜有客人的快餐准备好了,就端给旁边等候的客人。
咱们会发现:虽然只有一我的服务,可是整个过程很是高效。
咱们来分析一下缘由:麦当劳的服务员虽然服务的客人很是多,可是花费在每一个客人身上的时间是很是短的,因此总体上很是高效。同时短板也很明显:若是碰问题顾客,下单很是慢,排队的客人就会拥堵。浏览器
其实还有一个重中之重:麦当劳服务员能如此高效,要依靠后面提供支持的强大的配送和运营系统。服务器
Java
则是多线程模型,与Node.js
相比,它就是高级餐厅,一对一服务,互不影响,固然成本也是高的。多线程
以上这些都是基本运行模型的特性,实际使用仍是要看场景给设计。闭包
Javascript
是动态语言,用于脚本等场景时,很是灵活高效。可是业务逻辑场景时,规范性和严谨性就不足了,主要表如今:变量、参数、返回值的类型不肯定,容易被用错;模块之间的调用、对外提供接口时,契约定义不明确。框架
有了TypeScript
,ES6
以后,上述问题就有了明显改善,同时TypeScript
强大的类型系统,让设计和编写仍然拥有很是好的灵活性和设计空间。异步
Java
有的接口、泛型、类、继承和多态,TypeScript
包罗万象,同时TypeScript
还有交叉类型、联合类型、映射类型、类型推导和条件类型等黑魔法。函数式编程
另外,由于TypeScript
是 Javascript
的超集,因此它也具有函数式编程的能力。函数式编程的抽象能力很是强大,能提供不少有用的特性:好比反作用消除
,引用透明
,高阶函数
,闭包
,模式匹配
,延迟求值
等等。
Node.js + TypeScript
被愈来愈多的公司用于核心业务,好比:国外的Paypal、Linkedin、Walmart、Netflix等,国内的阿里、腾讯、网易等。npm
托管的包数量已经超越其余包托管器。
框架方面,国外的Nest.js
,国内的Midway
已经有了不少成熟应用案例。Nest.js
从编程体验上,也和Spring
很是类似。
Node.js
后续会日趋成熟,应用范围也会愈来愈普遍。固然,短时间内还不会替Java
的企业服务主力位置,毕竟能力特性不同,而且生态成熟度、基础设施成熟度仍是差了不止一个量级的。
Node.js
最新版支持了Worker Thread
,诊断报告
,Heap Dump
,这几个特性让它在生产环境的使用愈来愈驾轻就熟,同时还有大幅的速度提高,后续表现可期。