iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Node.js有哪些特性
  • 515
分享到

Node.js有哪些特性

2024-04-02 19:04:59 515人浏览 泡泡鱼
摘要

这篇文章主要讲解了“node.js有哪些特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js有哪些特性”吧!为何用Node对于我来说,对于团队来

这篇文章主要讲解了“node.js有哪些特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js有哪些特性”吧!

为何用Node

对于我来说,对于团队来说,适用Node的原因其实很简单:开发起来快。熟悉JS的前端同学可以很快上手,节省成本。选一个Http server库起一个server,选择合适的中间件,匹配好请求路由,看情况合理使用ORM库链接数据库、增删改查即可。

Node的适用场景

Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。这种模型使得Node.js 可以避免了由于需要等待输入或者输出(数据库、文件系统、WEB服务器...)响应而造成的 CPU 时间损失。所以,Node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。

对应到平时具体的业务上,如果是内部的系统,大部分仅仅就是需要对某个数据库进行增删改查,那么Server端直接就是Node.js一把梭。

对于线上业务,如果流量不大,并且业务逻辑简单的情况下,Server端也可以完全使用Node.js。对于流量巨大,复杂度高的项目,一般用Node.js作为接入层,后台同学负责实现服务。如下图:

Node.js有哪些特性

同样是写JS,Node.js开发和页面开发有什么区别

在浏览器端开发页面,是和用户打交道、重交互,浏览器还提供了各种Web api供我们使用。Node.js主要面向数据,收到请求后,返回具体的数据。这是两者在业务路径上的区别。而真正的区别其实是在于业务模型上(业务模型,这是我自己瞎想的一个词)。直接用图表示吧。

Node.js有哪些特性

Node.js有哪些特性

开发页面时,每一个用户的浏览器上都有一份JS代码。如果代码在某种情况下崩了,只会对当前用户产生影响,并不会影响其他用户,用户刷新一下即可恢复。而在Node.js中,在不开启多进程的情况下,所有用户的请求,都会走进同一份JS代码,并且只有一个线程在执行这份JS代码。如果某个用户的请求,导致发生错误,Node.js进程挂掉,server端直接就挂了。尽管可能有进程守护,挂掉的进程会被重启,但是在用户请求量大的情况下,错误会被频繁触发,可能就会出现server端不停挂掉,不停重启的情况,对用户体验造成影响。

以上,可能是Node.js开发和前端JS开发最大的区别。

Node.js开发时的注意事项

用户在访问Node.js服务时,如果某一个请求卡住了,服务迟迟不能返回结果,或者说逻辑出错,导致服务挂掉,都会带来大规模的体验问题。server端的目标,就是要 快速、可靠 地返回数据。

由于Node.js不擅长处理复杂逻辑(javascript本身执行效率较低),如果要用Node.js做接入层,应该避免复杂的逻辑。想要快速处理数据并返回,一个至关重要的点:使用缓存。

例如,使用Node做React同构直出,renderToString这个Api,可以说是比较重的逻辑了。如果页面的复杂度高,每次请求都完整执行renderToString,会长时间占用线程来执行代码,增加响应时间,降低服务的吞吐量。这个时候,缓存就十分重要了。

实现缓存的主要方式:内存缓存。可以使用Map,WeakMap,WeakRef等实现。参考以下简单的示例代码:

const cache = new Map();  router.get('/getContent', async (req, res) => {    const id = req.query.id;    // 命中缓存    if(cache.get(id)) {      return res.send(cache.get(id));    }     // 请求数据    const rsp = awairpc.get(id);       // 经过一顿复杂的操作,处理数据    const content = process(rsp);    // 设置缓存    cache.set(id, content);    return res.send(content);  });

使用缓存时,有一个很重要的问题是:内存缓存如何更新。一种最简单的方法,开一个定时器,定期删除缓存,下一次请求到来时,重新设置缓存即可。在上述代码中,增加如下代码:

setTimeout(function() {    cache.clear();  }, 1000 * 60); // 1分钟删除一次缓存

如果server端完全使用Node实现,需要用Node端直接连接数据库,在数据时效性要求不太高、且流量不太大的情况下,就可以使用上述类似的模型,如下图。这样可以降低数据库的压力且加快Node的响应速度。

Node.js有哪些特性

另外,还需要注意内存缓存的大小。如果一直往缓存里写入新数据,那么内存会越来越大,最终爆掉。可以考虑使用LRU(Least Recently Used)算法来做缓存。开辟一块内存专门作为缓存区域。当缓存大小达到上限时,淘汰最久未使用的缓存。

内存缓存会随着进程的重启而全部失效。

当后台业务比较复杂,接入层流量,数据量较大时,可以使用如下的架构,使用独立的内存缓存服务。Node接入层直接从缓存服务取数据,后台服务直接更新缓存服务。

Node.js有哪些特性

当然,上图中的架构是最简单的情形,现实中还需要考虑分布式缓存、缓存一致性的问题。这又是另外一个话题了。

  • 错误处理

由于Node.js语言的特性,Node服务是比较容易出错的。而一旦出错,造成的影响就是服务不可用。因此,对于错误的处理十分的重要。

处理错误,最常用的就是try catch 了。可是 try catch无法捕获异步错误。Node.js中,异步操作是十分常见的,异步操作主要是在回调函数中暴露错误。看一个例子:

const readFile = function(path) {      return new Promise((resolve,reject) => {          fs.readFile(path, (err, data) => {              if(err) {                   throw err; // catch无法捕获错误,这和Node的eventloop有关。          // reject(err); // catch可以捕获        }        resolve(data);          });      });  } router.get('/xxx', async function(req, res) {    try {      const res = await readFile('xxx');      ...    } catch (e){      // 捕获错误处理      ...      res.send(500);    }  });

上面的代码中,readFile 中 throw 出来的错误,是无法被catch捕获的。如果我们把 throw err 换成 Promise.reject(err),catch中是可以捕获到错误的。

我们可以把异步操作都Promise化,然后统一使用 async 、try、catch 来处理错误。

但是,总会有地方会被遗漏。这个时候,可以使用process来捕获全局错误,防止进程直接退出,导致后面的请求挂掉。示例代码:

process.on('uncaughtException', (err) => {    console.error(`${err.message}\n${err.stack}`);  });  process.on('unhandledRejection', (reason, p) => {    console.error(`Unhandled Rejection at: Promise ${p} reason: `, reason);  });

关于Node.js中错误的捕获,还可以使用domain模块。现在这个模块已经不推荐使用了,我也没有在项目中实践过,这里就不展开了。Node.js 近几年推出的 async_hooks 模块,也还处于实验阶段,不太建议线上环境直接使用。做好进程守护,开启多进程,错误告警及时修复,养成良好的编码规范,使用合适的框架,才能提高Node服务的效率及稳定性。

感谢各位的阅读,以上就是“Node.js有哪些特性”的内容了,经过本文的学习后,相信大家对Node.js有哪些特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Node.js有哪些特性

本文链接: https://www.lsjlt.com/news/84754.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js有哪些特性
    这篇文章主要讲解了“Node.js有哪些特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node.js有哪些特性”吧!为何用Node对于我来说,对于团队来...
    99+
    2024-04-02
  • Node.js 8.5新特性有哪些
    本篇内容主要讲解“Node.js 8.5新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js 8.5新特性有哪些”吧!Node.js 8.5...
    99+
    2024-04-02
  • Node.js v15.x 新特性有哪些
    这篇文章主要讲解了“Node.js v15.x 新特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node.js v15.x 新特性有哪些”吧!简单...
    99+
    2024-04-02
  • Node.js的特点有哪些
    Node.js的特点有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。异步是什么意思比如说你的爸,今天要叫你做些事情,比如说你要做饭、洗衣服...
    99+
    2024-04-02
  • node.js命令行有哪些特点
    1. 异步非阻塞:Node.js使用异步的事件驱动模型,可以处理大量并发连接,不会阻塞其他的操作。2. 单线程:Node.js使用单...
    99+
    2023-08-16
    node.js
  • MySQL特性有哪些
    这篇文章主要介绍“MySQL特性有哪些”,在日常操作中,相信很多人在MySQL特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL特性有哪些”的疑惑有所帮助!接...
    99+
    2024-04-02
  • VB.NET有哪些特性
    这篇文章将为大家详细讲解有关VB.NET有哪些特性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面以VB2010为例加以说明。首先,在语言中取消连接符这个改动表面看很小,因为basic的开发者都知晓,原...
    99+
    2023-06-17
  • Flexbuilder4特性有哪些
    这篇文章主要介绍Flexbuilder4特性有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flexbuilder4的10个新特性MAX大会上HeidiWilliams用10分钟介绍了FlexBuilder4(G...
    99+
    2023-06-17
  • HASH有哪些特性
    这篇文章主要为大家展示了“HASH有哪些特性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HASH有哪些特性”这篇文章吧。哈希满足特性平衡性 :平衡性是指哈希的...
    99+
    2024-04-02
  • Django特性有哪些
    这篇文章主要介绍了Django特性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在正式开始学习Django框架前,我们不妨先来认识一下它的特性。我们可以简单的把特性分为...
    99+
    2023-06-14
  • FlexBuilder有哪些特性
    这篇文章主要为大家展示了“FlexBuilder有哪些特性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“FlexBuilder有哪些特性”这篇文章吧。【FlexBuilder】FlexBuild...
    99+
    2023-06-17
  • graphql有哪些特性
    这篇文章主要介绍“graphql有哪些特性”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“graphql有哪些特性”文章能帮助大家解决问题。graphql 是一种用于 API 的查询语言,对你的 AP...
    99+
    2023-06-27
  • thinkphp有哪些特性
    本篇内容主要讲解“thinkphp有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp有哪些特性”吧!thinkphp是一个免费开源的、快速的、简单的、面向对象的轻量级PHP...
    99+
    2023-06-29
  • Node.js19有哪些特性
    今天小编给大家分享一下Node.js19有哪些特性的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Node.js 14 将在 ...
    99+
    2023-07-04
  • Flutter有哪些特性
    这篇文章主要介绍“Flutter有哪些特性”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter有哪些特性”文章能帮助大家解决问题。一、Flutter是什么Flutter是 Google 于 ...
    99+
    2023-06-27
  • ecmascript5有哪些特性
    本篇内容主要讲解“ecmascript5有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ecmascript5有哪些特性”吧! ...
    99+
    2024-04-02
  • angularjs有哪些特性
    本文小编为大家详细介绍“angularjs有哪些特性”,内容详细,步骤清晰,细节处理妥当,希望这篇“angularjs有哪些特性”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • vue3.0的特性有哪些
    vue3.0的特性有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。vue是什么软件Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它...
    99+
    2023-06-06
  • Linux7的特性有哪些
    Linux7的特性有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.对Windows 产品的支持早在2009年,微软和红帽签订了一份旨在为Windows和Linux用户提...
    99+
    2023-06-07
  • JDK1.5有哪些新特性
    本篇内容主要讲解“JDK1.5有哪些新特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JDK1.5有哪些新特性”吧!  1.泛型(Generic)  C++通过模板技术可以指定集合的元素类型,...
    99+
    2023-06-03
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作