【Nodejs学习之旅·1-1】为何选择Nodejs

前言


程序员界有个熟知的段子“xxx是世界上最好的语言”,但实际上语言无论高低级,它存在即有它的应用场景和相较于其他语言略有优势的一面,与其纠结于学习何种语言,倒不如根据自己目前所处业务层面去考虑到底什么语言更适合目前的场景。

我只是一个刚毕业半年的前端新手玩家, 但就是这半年的时间里,在组里大佬的技术熏陶下,我的目光也不再只局限于浏览器中的一亩三分地,而是开始把目光更多聚焦在了nodejs。有人说,js不适合搞后端,跟java,c相比有着几十只手指都数不过来的劣势。

首先就是性能,它只是单线程运行,一崩全崩,还不能充分利用cpu,而且很慢,我要它何用???这时候你可以反过来看,也正是因为使用单线程,Nodejs不会存在死锁,因为它压根没有锁这东西。而且它不会阻塞I/O调用,对于高并发的I/O密集型场景是再适合不过了。

当然它的好处远远不止这些,下面会一一介绍。对于我来说,使用nodejs能够让我实现前后端几乎无缝切换(这一点很爽),除了一些API的不同,我完全可以在短时间内上手,只要有一点js的基础。

在前端框架如vue,react等不断繁荣发展的时候,nodejs在无数前端攻城狮的努力下也开始绽放出属于它自己的光芒,大前端mockBFF(Backend For Frontend) 等随处可见它的身影,我也坚信Nodejs未来的应用场景会越来越广阔。

之所以写下这系列的文章,一方面是想记录下自己的学习轨迹,另一方面也是想通过写博客的方式鞭策自己,强迫自己去完善自己的知识面,让自己对于一项技术能够有更全面更深入的了解。这系列的文章我大概会每隔一两周不定时更新,文章除了涉及对技术的介绍和讲解外,还包括在工作中的实际应用,欢迎大伙给我提建议(意见)。后续如果时间允许的话,也会针对vue和webpack以及js基础(ES6)另外展开的系列,当然也可以是其他的东西,比如大前端,中台,一些比较新的框架库的尝鲜啦,不过我暂时还没规划的那么远,敬请期待。

Nodejs是啥玩意?


Nodejs具有很多别称,如:Nodejs、NodeJS、Node.js,但其实他们指的都是一回事。简单来说Nodejs是使用C++编写而成的基于Javascript V8引擎的javascript 运行环境,更直白点就是运行在服务端的javascript(够直白了吧~)。

擅长处理I/O密集型任务的它有这两个特点:事件驱动、非阻塞I/O

优缺点


这个世界并不是非黑即白的,同样Nodejs在它擅长领域大放光芒的时候却也有些小诟病。下面主要介绍Nodejs的优缺点。

事件驱动模型对于前端开发人员来说一点都不生疏,毕竟在浏览器中我们我们一直在处理各种个样的Dom元素事件,所以如果你之前从事得是前端开发工作,那么当你切换到node的时候会很自然。另外,非阻塞的I/O处理方式可以在用较少系统资源的情况下带来较高的性能并有较好的负载均衡能力,非常适合作为中间层提供服务。使用了Chrome V8引擎大大加快了我们变异js代码的速度,关于V8引擎有很多学问,有时间真的好好研究下。

再一个好处就是node社区很活跃,各种模块你想得到的想不到的基本都有人给你写好了,不用自己再重复造轮子,特别喜欢自己造轮子的请忽略~

Nodejs擅长于处理I/O密集型任务,但对于CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,它就没什么优势可言了 ,这也是它自身的架构决定的。

Node是单线程的,只支持单核CPU,并不能充分的利用多核CPU服务器。当这个进程崩掉,那么整个web服务就崩掉了。但是天生不足,后天来补嘛,我们可以通过提升代码健壮性和其他一些手段来避免这些情况的发生并使它充分利用系统资源。在 Node.js v10.5.0 以上的版本添加的Worker Threads特性,让Nodejs真正拥有了多线程的能力,详细可见 真-Node多线程

系列安排

接下来这个Nodejs系列的大致安排如下:

  • 模块机制
  • 事件/异步
  • 异步编程
  • Network
  • OS
  • 进程
  • 日志
  • 安全
  • 存储
  • koa框架

暂时只能想到这么多,后面慢慢补充。

转载于:https://juejin.im/post/5c826ea1f265da2daf79d3ef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值