了解节点中代码执行的阻塞和解除阻塞

现在,我们在fs模块中具有文件写入功能writeFileSync,如下所示-

const requestBody = [];
req.on('data', (chunks)=>{
   requestBody.push(chunks);
});
return req.on('end', ()=>{
   const parsedData = Buffer.concat(requestBody).toString();
   const username = parsedData.split('=')[1];
   fs.writeFileSync('username.txt', username);
   //重定向res.statusCode = 302; 
   res.setHeader('Location','/');
   return res.end();
});

同步表示已同步。这是一个阻塞代码示例。一旦文件写入完成,则仅对其余文件执行代码。上面的代码比较简单,但是如果我们进行大量的文件处理操作,将会导致应用性能下降。

这种代码执行方式将减慢其他请求的速度,并最终降低应用程序的性能。

解决此问题的方法是使用文件写入的异步功能。我们在异步的fs模块中有writeFile。以下是它的示例-

return req.on('end', ()=>{
   const parsedData = Buffer.concat(requestBody).toString();
   const username = parsedData.split('=')[1];
   fs.writeFile('username.txt', username, (error)=>{
      console.log(error);
   });
   //重定向res.statusCode = 302; 
   res.setHeader('Location','/');
   return res.end();
});

writeFile还有一个参数,即错误对象。如果完成文件处理功能时有任何错误,我们可以在控制台中进行检查。

这样我们可以避免代码阻塞。在文件处理中,Node js可以使用操作系统多线程方法来提供更好的性能。它只是注册事件并在以后的特定时间执行它们。

异步是在node.js中处理操作的最常用方式,例如从服务器获取数据,处理数据,分页等。

ReadFile和readFileSync -

与写入文件功能类似,我们具有读取文件功能,它们也分为阻塞和非阻塞两种方式。

readFile是非阻塞的,而readFileSync是阻塞的。我们可以使用Promise处理尚未完成的操作,但一旦完成将以一定的决心做出回应。

PromiseOperationFunction()
.then( ()=> console.log(‘completed with succes’); )
.catch((err)=> console.log(‘completed with failure’); );