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

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

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

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,这几个特性让它在生产环境的使用越来越得心应手,同时还有大幅的速度提升,后续表现可期。

原文链接:juejin.im

上一篇:你不知道之vue如何支持TS
下一篇:@types/react-native

相关推荐

  • 🙋Hanjst汉吉斯特改进+enSafeExpression安全表达式等

    Hanjst汉吉斯特模版语言及模版引擎,近期持续改进升级。 这次改进主要是增加了对安全输出表达式兼容,由于涉及到对软件开发过程中的效率和软件运行效率的平衡和取舍,所以多写了几句,以描述这个权衡利弊对...

    3 个月前
  • 🙋Hanjst汉吉斯特升级:+showImageAsync及性能改进等

    自2019年元旦🙋Hanjst汉吉斯特 模板语言及其编译引擎发布,已经过去一年多了。 这期间随着 🙋Hanjst汉吉斯特 的推广应用,我们也陆续发布了如下一些更新内容: 🛠️Hanjst/汉吉...

    4 个月前
  • 🙋Hanjst汉吉斯特优化+JsonDataFromScript等

    近日继续对 🙋Hanjst汉吉斯特优化改进。这次的改进思考是从服务器端返回的 HanjstJsonData的容器设计问题。目前的做法是服务器端的HanjstJsonData放入终端页面的一个Div元...

    2 个月前
  • 😉我用 Nuxt.js 仿了个掘金

    前言 首先肯定是要夸夸掘金啦,最开始从 CSDN 到 博客园 再到 掘金,个人感觉掘金的技术氛围非常的nice,真是个宝藏社区👏。技术文章大多以前端为主,对前端开发者非常友好,质量也是歪瑞古的。

    3 个月前
  • 😀一个原生js弹幕库

    danmujs 😀一个原生js弹幕库,基于 CSS3 Animation 地址、核心代码 本项目基于 rcbullets,项目约70%的代码基于rcbullets,首先要感谢这个项目的作者,如...

    6 个月前
  • 🕵️‍♀️由原型到JS中的“模拟类”

    讲述了有关 JavaScript 中原型相关知识,又引出了 JavaScript 中的“类“究竟是什么?,以及一系列相关问题。 一、前置知识 1、JavaScript 的面向对象(OOP) ​ 面向...

    4 个月前
  • 🔥《吊打面试官》系列 Node.js 必知必会必问!

    (/public/upload/f204a3b224d986128f1b4d9b8d06cd17) 前言 codeing 应当是一生的事业,而不仅仅是 30 岁的青春🍚 本文已收录 Git...

    5 个月前
  • 💖CSS + JS 送学妹满屏幕小爱心

    故事开始 午饭时间,暗恋已久的学妹拉着我的衣袖:“学长学长,你能不能让这些爱心变成五颜六色的吗~”。 我在旁边笑开了花~~~ image.png(/public/upload/04aaa24e...

    4 个月前
  • (干货👍)从详细操作js数组到浅析v8中array.js

    前言 最近在写面试编程题,经常用到数组,经常想偷个懒,用它提供的方法,奈何还是对数组方法使用不熟练,导致写了很多的垃圾代码,很多地方稍加修改的话肯定变得简洁高效优雅👊 所以✍这篇文章本着了解一下Ja...

    1 个月前
  • (vuejs学习)2、使用ElementUI(*)

    1.element安装 开发环境是win10,一到node官网下载node的.msi包(https://npm.taobao.org/mirrors/node/v10.16.0/nodev10.16....

    1 年前

官方社区

扫码加入 JavaScript 社区