其实并不是说一定要学习node,而是为了职场更好的发展,尤其是为了学习更高级的编程思维,学习node很有必要。
以下是对学习node必要性的具体阐述【推荐:node.js视频教程】
1.node.js最根本的能力是让js能够脱离浏览器运行,学好node,可以让自己不再是一个“纯前端”
2.学习nodejs是进行前端工程化的基础(NodeJS Stream)
3.学好node,可以编写服务端API,实现独立开发项目
4.作为中间层(引申问题:什么是中间层?)
中间层(BFF)也叫做应用层,在架构中处于服务层(Java)和客户端之间,主要发挥的作用:
- 接收客户端请求
- 渲染HTML页面
- Bigpipe,Comet,Socket
- 合并接口请求
- 路由定制
- 数据缓存
现在为什么说很多时候前端也需要编写自己的api?
1.经典的双层结构:前端 服务端
2.三层结构:前端 后端 服务端(现在的中大型项目所采用的结构)
三层结构的服务端只负责操作数据库,管理数据
,把数据返给后端,基本上就是纯粹的数据,不包含数据业务
后端就是所谓的中间层,如果前端来开发,那么优先选择nodejs,因为对于前端来说学习成本最低。
如果对自己的职场定位是做一辈子的纯前端,那么不需要学习nodejs,但是事实上做一辈子纯前端很难,一般到了35岁,所具备的能力还只是“搬砖”,那么在职场上的价值会越来越低。
CTO往往是由服务端工程师担任
理由:
1.需要设计整个公司的技术架构
2.需要从全局考虑问题
3.需要掌控公司最重要的资产:数据(谁掌握数据,谁才有话语权)
学好node并不是说就可以去做CTO,但至少可以大大的提高我们前端的职场地位。
从技术上,利用自己的能力独立完成一个项目、产品,是一件非常有成就感的事情。
就算排除掉前面的所有理由,作为一名纯前端,学习node也有很大的好处,可以培养我们的编程思维,扩展我们考虑问题的角度。
NodeJs的优缺点及适用场景
NodeJs的两大特点:事件驱动,非阻塞I/O
所以NodeJs的最大的两个优点
1.处理高并发,相比较于其他后端语言,每个连接发射(emit)一个在NodeJS引擎进程中运行的事(Event),放进事件队列当中,而不是为每个连接生成一个新的OS线程(并为其分配一些配套内存)
2.I/O密集型应用
因为JavaScript单线程的特点, NodeJs不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
NodeJs的适用场景:
RESTful API
这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。统一Web应用的UI层
目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。大量Ajax请求的应用
例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求
总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景