Node.js + TypeScript 开发服务端是什么样的体验

Node.js + TypeScript 开发服务端是什么样的体验,和传统的服务端语言 Java 有什么不一样,我来讲几点个人感觉。

Node.js特性

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相比,它就是高级餐厅,一对一服务,互不影响,固然成本也是高的。多线程

以上这些都是基本运行模型的特性,实际使用仍是要看场景给设计。闭包

TypeScript黑魔法

Javascript 是动态语言,用于脚本等场景时,很是灵活高效。可是业务逻辑场景时,规范性和严谨性就不足了,主要表如今:变量、参数、返回值的类型不肯定,容易被用错;模块之间的调用、对外提供接口时,契约定义不明确。框架

有了TypeScriptES6以后,上述问题就有了明显改善,同时TypeScript强大的类型系统,让设计和编写仍然拥有很是好的灵活性和设计空间。异步

Java有的接口、泛型、类、继承和多态,TypeScript包罗万象,同时TypeScript还有交叉类型、联合类型、映射类型、类型推导和条件类型等黑魔法。函数式编程

另外,由于TypeScriptJavascript的超集,因此它也具有函数式编程的能力。函数式编程的抽象能力很是强大,能提供不少有用的特性:好比反作用消除引用透明高阶函数闭包模式匹配延迟求值等等。

生态

Node.js + TypeScript被愈来愈多的公司用于核心业务,好比:国外的Paypal、Linkedin、Walmart、Netflix等,国内的阿里、腾讯、网易等。
npm托管的包数量已经超越其余包托管器。

框架方面,国外的Nest.js,国内的Midway已经有了不少成熟应用案例。Nest.js从编程体验上,也和Spring很是类似。

更多

Node.js后续会日趋成熟,应用范围也会愈来愈普遍。固然,短时间内还不会替Java的企业服务主力位置,毕竟能力特性不同,而且生态成熟度、基础设施成熟度仍是差了不止一个量级的。

Node.js最新版支持了Worker Thread诊断报告Heap Dump,这几个特性让它在生产环境的使用愈来愈驾轻就熟,同时还有大幅的速度提高,后续表现可期。

读书三到-读书,学习技术

相关文章
相关标签/搜索