前言
nodejs是一个构建网络应用的基础框架,开发者可以在nodejs的基础上构建服务器、客户端、命令行工具等应用。如今nodejs已然成为了前端中必要的一门技术,接下来笔者就带你了解和入门这项技术,并利用express来搭建服务器应用。
nodejs的特点
异步I/O
在nodejs中,绝大多数的操作都是以事件循环的方式,异步去进行的。这就使得每个I/O调用之间无需等待上一个I/O执行完毕再执行,所以nodejs很适合应用在I/O任务密集的场景。个人理解尽管有async/await这样同步的编程方式,也应该少用同步阻塞来写业务逻辑。具体可以再用一篇文章来说说。(挖坑)
事件与回调函数
在js中,函数是第一公民,可以常常看到使用函数作为参数传入,这种方式我们称为回调函数。使用回调函数可以使多个异步任务场景下各事件独立(每个事件都是一个独立的函数),使得我们的代码可以进行松耦合。
但这种模式写代码还是会有弊端。使用事件回调函数方式来写代码必定会使代码的编写顺序和执行顺序不一一对应,不易于代码阅读。另一方面回调函数嵌套变多后会造成回调地狱的问题(可以用promise来解决)。
单线程
node保留了js在浏览器中的单线程特点。这就意味着在node.js中不会遇到像多线程语言会遇到的线程锁问题(死锁问题),共享状态和交换context(上下文)所带来的性能上的开销。但同时,单线程也会有以下缺点
- 无法利用多核CPU进行计算。
- 错误会导致整个应用退出。
- 大量计算占用CPU导致无法继续调用异步I/O。
对于大量计算占用CPU的问题,node采用了子线程来解决——通过把大量计算任务分发给多个子进程,等计算完成后通过事件消息来传递结果。
跨平台
为了使事件驱动能在跨平台上使用,nodejs的上层模块与操作系统之间还弄了一层平台层架构——libuv。如下图所示(图出自《深入浅出Node.js》):

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐