聊聊前端如何玩node

缘起


记得以前有人说过,node的地位很尴尬,只能拿来写写小项目!我一直在想真的是这样嘛?因为每一门语言的出现,必然有其独特性和适用场景,多年来我一直在思考和寻找答案!直到最近,我听了一群大佬们的分享,结合自己的经验,终于明白了前端应该如何正确的玩node!

node的前世今生


我们通过时间线来简单梳理下node的发展历程:

  • 2009年node诞生
  • 2010年Express出现,第一个比较好用的node框架,能让开发不在关注node底层,只需要按照Express写代码即可,具有里程碑意义!
  • 2013年Koa诞生,丰富了node架构的同时,又增加了node的生态
  • 2014年Midway诞生,基于Egg,Koa,Express
  • 2016年Egg诞生,基于Koa
  • 2016年Next,js诞生
  • 2016年Nuxt诞生
  • 2017年Nest诞生,基于Express和Fastify
  • 2021年Remix诞生

在node框架不断完善,不断对标不同的语言的同时,作为使用者享受便利的同时,也增加了学习成本,同时降低了扩张性!

这里再插一句,node的其中一位核心成员在2012-2013因为一些不可控的原因,不再更新node,后来这位大佬写了个node的替代品deno,哈哈,大佬还是牛逼的,随便就能写个语言出来!大家有兴趣可以去看看deno,相信你会有所收获!

node为啥没有像java等语言被广泛应用


这个其实原因有很多,归根结底就是以下三点

  • 社区不够繁荣,对比java等语言丰富的生态,node的开发者无论从数量还是总体质量上,远远低于java等语言
  • 企业中,尤其是中小企业,招一个node开发的成本是远远高于java的,因为java有庞大的从业人数,java很多问题有现成的解决方案,繁荣的社区也为java的开发者提供了更多的可能。更直白一点,作为一家企业的决策者,如果用node代替java,那么它的收益其实是远远小于支出的!
  • 上述两点原因加起来,加上现在很多前端更多的是专注于前端开发,对node浅尝辄止,市场需求没有java这么高,所以node为何出来了10多年了,还没有像java等语言那样被广泛使用!

node在企业中如何被使用


node要在企业中使用,必须要考虑的是,node是不是能像其他服务端语言一样,满足企业需求!换而言之,就是其他服务端语言有的功能,node也要能实现!但是因为node没有繁荣的生态,所以有部分功能没法满足,这就很致命了!

有的童鞋要说,增加node社区的繁荣,让node的生态对标其他服务端语言的生态不就好了嘛。遗憾的是,短时间很难!

于是有大佬开始另辟蹊径,完美的解决了上述问题。当一条路走不通的时候,想想其他的路,技术本来就是一个闭环。

大佬们通过云原生相关的能力,有兴趣的童鞋可以去了解下CNCF,通过Docker和边车(寄生插件SideCar),解决了node生态的不足的问题!

Docker的作用不用说了吧,可移植,可扩缩容,解决了环境差异!
边车大家可以理解为一个桥梁,往node中接入其他服务端语言拥有的一些能力(包括但是不限于SDK)。

解决了node对标其他服务端语言的问题后,node现在可以作为企业级架构被使用了!

目前node用的比较多的是大厂和一部分中厂,因为很多大厂集中了一大群高精尖的node大佬,所以使用起来比较方便,比如语雀就是完全用node作为架构的!中厂的话,用node更多的是作为一个BFF,即网关,让用户获得更好的体验的同时,降低了后端童鞋的工作量!

这里再来纠正一个问题,很多童鞋觉得node开发并发会有问题,其实这个问题只要是服务端语言就都存在,这个问题其实是个运维问题,node可不背这个锅,哈哈哈!问题来了,如何解决这个问题呢,很简单啊,限流,缓存,兜底等等方案,其他服务端语言的解决方案,就是node的解决方案。请大家记住,node对比其他服务的语言,差距只是在生态上和社区的繁荣程度上,和node本身无关!

结论:最好是使用CNCF,但是学习成本很大!其次是可以使用上面列举的成熟的框架,能覆盖大部分服务的场景即可!

再来盘盘node底层


大家可能想问,作为使用者,会使用不就好了,干嘛要关注底层!这里,小编想说,知其然,知其所以然,了解一门语言的底层,能让大家更好的使用这门语言!

很多人可能就是觉得node底层就是c和c++,其实不然,它是分三块!

  • v8,这个不用说了吧,浏览器内核就是v8,实现了js的解析和执行,并且具有扩展功能,也正是它的扩展能力,所以才有了js运行时的概念和运用(runtime),同时解决了js和C、C++的通信问题。
  • Libuv,这个是跨平台的异步IO库,这也就是为啥node.js的IO读写能力很强的原因!它封装了各个操作系统的API,提供网络,文件,进程等功能!大家熟知的node面试题,event loop其实就是在这块中运行的!它解决了操作系统相关的问题。
  • 第三方库,异步DNS解析库(cares),Http解析器,加密解密库等,扩展node的能力!

尾声


愉快的时光总是短暂的,不知不觉又到了离别的时候了!感谢大家的阅读,码字不易,如果大家觉得这篇文章对大家有帮助,请关注加点赞吧,哈哈哈!

猜你喜欢

转载自blog.csdn.net/zjscy666/article/details/122222671