Node.js有什么难点

Yang 354

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它的难点主要有以下几个方面:一、单线程;二、内存管理;三、模块化;四、异常处理;五、阻塞代码;六、 异步转同步。

一、单线程

Node.js 是单线程的,这意味着它只有一个主线程来处理所有的请求。这也是 Node.js 的一个难点,因为如果主线程出现了阻塞,整个应用程序都会受到影响。

二、内存管理

Node.js 的内存管理是基于 V8 引擎的垃圾回收机制实现的。这意味着开发人员需要注意内存泄漏和内存溢出等问题。

三、模块化

Node.js 采用了 CommonJS 规范来实现模块化。这意味着开发人员需要了解 CommonJS 规范,并且需要使用 require() 函数来加载模块。

四、异常处理

说到异常捕获,相信大家都会想到try/catch/final,但是对于异步编程这种方式并不适用。

伪代码如下:

try{

    async(callback);

}catch(e){

}

假设async是一个异步方法,调用async方法后,就会产生一个事件,事件(callback)会被放入该有的队列中,到了下一次事件循环(Tick),会却从队列中取出,把回调的内容传递给异步函数。因为这种情况,对异步方法进行try/catch操作只能捕获当次事件循环内的异常,对callback执行回调时候抛出的异常是无能为力的。

由于这种异常捕获的难点,Node在处理异常上形成了一种约定,将异常作为回调函数名列前茅个实参传回,如果为空值,则表明异步调用没有异常抛出。

异步方法调用例子

async(function(err,result){

//TOO

})

我们在代码编写过程中,自己编写的异步方法,也要遵循这样一些规则。

1、必须执行调用者传入的回调函数

2、正确传递回异常共调用者判断

异步方法代码例子如下

var async=function(callback){

    process.nextTick=something;

    if(error){

        return callback(error);

    }

    callback(null,results);

});

五、阻塞代码

javascript编程没有sleep()这样的线程沉睡功能,要想实现延时操作只能使用setInterval()和setTimeout()这两个函数。但是node是异步的,这两个函数并不阻塞后续代码的持续执行。(遇到这种睡眠一定时间的需求的时候,统一规划业务逻辑之后,调用setTimeout()的效果会更好)

六、 异步转同步

Node提供了绝大部分的异步API和少量的同步API,但是异步编程有的时候需要根据流程,将逻辑梳理成顺序的同步形式,这种情况我们可以使用promise,和await等。

延伸阅读

Node.js适合做什么

Node.js适合用于构建高性能、可扩展的网络应用程序,例如Web服务器、API服务器、实时聊天应用程序、游戏服务器等。它还可以用于构建命令行工具、桌面应用程序等。Node.js的异步I/O和事件驱动模型使其非常适合处理I/O密集型任务,例如文件操作、网络操作等。但是,它不适合CPU密集型任务,例如图像处理、视频编码等 。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部