当前位置: 首页 > 后端技术 > Node.js

用Node.js+TypeScript开发服务器是什么体验

时间:2023-04-03 14:41:26 Node.js

用Node.js+TypeScript开发服务器是什么体验,和传统的服务器语言Java有什么区别?让我分享一些我的感受。Node.js的特点Node.js在设计上与传统的后端语言Java有很大不同。一种是动态语言,一种是静态语言;一种是单线程模型,另一种是多线程模型。Node.js其实并不是一门语言,它是一个Javascript服务器运行环境,在它出现之前Javascript只能运行在浏览器中。这里我们也可以这样说:Node.js是可以编写服务端的Javascript。Node.js是单线程模型,事件驱动,异步I/O(底层是基于c语言实现的libuv库)。这是它最基本的特性,和Nginx类似。这个特性决定了它适合的场景:I/O密集型、计算量较少的应用。例如:Node.js的线程模型就像麦当劳店里负责点餐的服务员。顾客排队下单。每位顾客下单后,在旁边等候用餐,服务员继续为下一位顾客点餐。同时,如果你发现餐柜里有客人,快餐做好了,你再端给旁边等候的客人。我们会发现,虽然只有一个人服务,但是整个过程非常高效。我们来分析一下原因:虽然麦当劳的服务员服务的顾客很多,但是花在每个顾客身上的时间很短,所以整体效率很高。同时,缺点也很明显:如果遇到问题客户,下单会很慢,排队很挤。其实还有一个重中之重:麦当劳的服务员能如此高效,背后有强大的配送和运营系统提供支撑。Java是一个多线程模型。与Node.js相比,是高档餐厅,一对一服务,相互独立,当然成本也高。以上是基本运行模型的特点,实际使用还是要看场景的设计。TypeScriptBlackMagicJavascript是一种动态语言,在脚本等场景中使用时非常灵活和高效。但在业务逻辑场景中,规范和严谨性不够,主要表现在:变量、参数、返回值的类型不确定,容易被错误使用;模块间调用,对外提供接口时,契约定义不明确。有了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支持工作线程、诊断报告和堆转储。这些特性让它在生产环境中使用起来越来越方便。同时还有大幅提速,后续表现令人期待。