使用node . js的好处是什么

介绍

小编给大家分享一下使用节点。js的好处是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

JavaScript的日益发展带来了很多变化,当今的网络开发面貌已经变得截然不同。在几年前是很难想象在服务器上运行JavaScript的。

在深入研究节点。js之前,你可能想了解使用跨栈的JavaScript有什么好处,它统一了语言和数据格式(JSON),允许你以最佳的方式重用开发人员资源,将节点。js合并到技术栈中是一个关键优势。

节点。js是一个基于Chrome的名为V8的JavaScript引擎构建的JavaScript运行环境。值得注意的是,节点。js的创建者Ryan Dahl的“受到Gmail等应用的启发”,目标是为了开发一个具有<强>实时推送功能的网站强。在节点。js中,他提供了一个用于处理非阻塞事件驱动的I/O工具。

用一句话来概括:节点。js在基于websockets推送技术的实时网络应用中大放异彩。在过去的20多年来我们一直在使用基于无状态请求——响应模式的无状态网络应用,现在终于拥有了能够实时双向连接的网络应用,其中客户端和服务器都可以启动通信,并允许它们自由地交换数据。

这与典型的总是由客户端发起通信的Web响应模式形了成鲜明的对比。此外它也同样基于在标准端口80上运行的开放网络技术栈(HTML、CSS和javascript)。

有人可能会争辩说,我们多年来一直以Flash和Java Applet的形式做到这一点,但实际上,这些只是使用网络作为传输协议将数据传给客户端的沙盒环境。此外,它们是隔离运行的,通常在非标准端口上运行,这可能需要额外的权限。

凭借其优势,节点。js在依赖其独特优势的众多知名公司的技术堆栈中发挥着关键作用。节点。js基金会几乎已经整合了所有最好的想法,可以在节点。js基金会的案例研究页面上找到关于为什么企业应该考虑节点。js的简短PPT。

在本文中,我将不仅要讨论如何使用这些优势,而且还要讨论为什么你可能想要使用节点。js,并用一些经典的网络应用程序模型作为示例。

它是如何工作的?

节点。js的主要思想的是:在面向跨分布式设备运行的数据密集型的实时程序时,使用非阻塞,事件驱动的I/O来保证轻量和高效。

这读起来很拗口。

这意味着节点。js 不是一个即将成为主宰Web开发界的能够解决一切的新平台。<强>相反,它是一个满足特定需求的平台。理解这一点绝对是有必要的。你绝不希望将节点。js用于CPU密集型的操作,实际上,将它用于进行大量繁重运算的场合将会消除它几乎所有的优点,节点。js真正发挥作用的地方在于构建快速,可扩展的网络应用,因为它能够以高吞吐量处理大量并发连接,这相当于具有高可扩展性。

其底层的工作原理非常有趣。传统的Web服务技术每个连接(请求)都会产生一个新线程,占用系统内存并最终受限于可用的最大内存,而节点。js在单线程上运行,使用非阻塞I/O调用,允许它支持数以万计的并发连接(在事件循环中维持)。

快速计算:假设每个线程需要2 MB内存,那么在有8 GB内存的系统上运行的话,理论上最多有4000个并发连接(计算来自迈克尔硬饼干的文章”节点。js ?”, 2011年在IBM developerWorks上发布;不幸的是,这篇文章的链接现在已经失效了),这还没有算上线程之间的上下文切换的成本。这就是你通常在传统的Web服务器技术中处理的场景。通过避免所有这些问题,节点。js实现了超过1米连接并发数的级别,以及600 k的websockets并发连接数。

当然,编写节点。js应用的潜在缺陷是存在客户端请求之间共享单个线程的问题。首先,繁重的计算可能会阻塞节点的单个线程并导致所有,客户端出现问题(稍后会详细说明),因为传入的请求将被阻塞,直到计算完成为止。其次开发人员需要非常小心,不要让异常冒泡到到核心(最顶层)节点。js事件循环,这将导致节点。js实例终止(程序崩溃)。

为了避免异常冒泡到顶层,常用技术是将错误作为回调参数传递回调用者(而不是像在其他环境中那样抛出它们)。即使一些未被处理的异常冒泡到顶层,也有一些工具来监视节点。js进程并执行必要的恢复崩溃(虽然可能无法恢复到用户会话的当前状态),最常见的是永远模块。

npm:节点包管理器

在讨论节点。js时,一件绝对不应该被忽略的事是支持使用内置的npm工具进行包管理,默认情况下每个节点。js环境都会安装。npm模块的概念非常类似于

使用node . js的好处是什么