当前位置: 首页 > 后端技术 > Node.js

什么是Node.js?我为什么选择它?

时间:2023-04-03 17:11:57 Node.js

我们学习一个新东西,首先要知道它是从哪里来的?它是什么?可以做什么或者换句话说,可以解决什么问题?没有一个东西是最好的,它可以替代所有,但是在某个领域它是最适合的,就像Node.js一样。需要关心的事情。本文主要向大家介绍Node.js的背景,它能做什么,擅长什么。不会涉及到复杂代码级别知识的讲解。如果你觉得自己很熟悉,可以忽略它。作者简介:MayJun,NodejsDeveloper,热爱技术,热爱分享的90后,公众号《Nodejs技术栈》,Github上的一个开源项目https://www.nodejs.red文末在这篇文章中,我附上了节点。js技术栈学习指南路线图供大家参考!背景介绍Node.js?是一个基于Chrome的V8JavaScript引擎构建的JavaScript运行时。V8引擎的JavaScript运行环境。这里提几个关键词V8,JavaScript后面会解释。从这里,我们可以看出Node.js并不是一种新的编程语言。作为初学者,首先要了解它是JavaScript的运行环境。据说是服务器端的运行环境,所以这里的编程语言指的是JavaScript。回到2009年,JavaScript还是一种运行在浏览器环境中的脚本语言。当时笔者还是一名高中生,接触到的编程语言是VB。在这之前,可以用它写一些浏览器脚本,做一些动态特效,主要用于前端页面交互。2009年的时间线之后,Javascript不仅跑在浏览器上,还跑在服务器端,几乎把前端和后端串联起来。当然,这要归功于Node.js之父RyanDahl。我曾经认为它很棒。在众多编程语言中,为什么选择JavaScript?并且看下面的介绍。为什么是JavaScript?Node.js使用事件驱动、非阻塞I/O模型,使其轻量且高效。这是对Node.js的又一次介绍,关键词事件驱动,非阻塞I/O因此,在这些条件下,Node.js作者RyanDahl对C、Lua、Haskell、Ruby、JavaScript等语言进行了评估后,我最终选择了JavaScript,为什么?JavaScript是一种单线程语言。单线程的好处是在Java等多线程语言编程时不存在线程同步和线程锁问题,同时也避免了上下文切换带来的性能开销。其实在浏览器环境下只能是单线程的。你能想象多个线程操作同一个DOM的场景吗?这不是一团糟吗?那么单线程大家可能会想的一个问题就是,如果前面的执行不完,后面的会不会卡死?当然不能这样。JavaScript是一种事件驱动的异步回调模式。此外,JavaScript在服务器端没有任何历史包袱。因为在虚拟机上支持ChromeV8,JavaScript变成了Node.js。js首选语言。JavaScript的作者RyanDahl应该最有发言权。这里我查了一些资料,简单的参考了Node.js这本书,让大家有个初步的了解。Node.js架构Node.js由Libuv、ChromeV8和一些核心API组成,如下图所示:上图展示了Node.js的组成,下面做简要说明:js标准库,对外提供JavaScript接口,如模块http、buffer、fs、stream等。等级。V8:谷歌开源的高性能JavaScript引擎,用C++开发,应用于谷歌浏览器。如果您有兴趣了解有关V8引擎的更多信息,请访问什么是V8?Libuv:一个跨平台的事件驱动I/O库。它是用C和C++为Node.js开发的,是读取文件和与操作系统交互等I/O操作的核心部分。摘自一份Libuv中文教程C-ares:C-ares是一个异步DNS解析库Low-LevelComponents:提供http解析、OpenSSL、数据压缩(zlib)等功能。以上只是初步的认知。如果你想进一步了解Node.js,那么很多点都值得你深入学习。堆栈溢出的参考:which-is-correct-node-js-architectureNode.jsfeature在了解了Node.js的一些背景和架构模型之后,解决了它来自哪里?这是什么问题,现在让我们看看可以解决什么问题?它适合做什么?我不知道你以前是否听说过。Node.js非常擅长I/O密集型任务,处理一些I/O密集型和高并发的场景还是很有优势的。也是如此,这就是它的定位:提供一种简单安全的方式来用JavaScript构建高性能和可扩展的Web应用程序。单线程Node.js使用单线程运行,而不是其他服务器如ApacheHTTP,每次请求都会产生一个线程,这种方式避免了CPU上下文切换和内存中的大执行栈,这也是Nginx的原因以及其他服务器为解决“过去10年著名的C10K并发连接问题”所采用的方法。得益于Libuv强大的异步I/O,非阻塞I/ONode.js避免了因需要等待输入或输出(数据库、文件系统、Web服务器...)响应而导致的CPU时间损失。事件驱动编程事件和回调在JavaScript中很常见。同时,这种编程对于习惯了同步思维的同学来说可能有些吃力,但是这种编程模型确实是一种高性能的服务模型。Node.js和Nginx都是以事件驱动的方式实现的。不同的是,Nginx是用纯C编写的,只适用于Web服务器。在业务处理方面,Node.js是一个可扩展的高性能平台。跨平台Node.js一开始只能运行在Linux平台上,但是在v0.6.0版本之后,得益于Libuv的支持,可以运行在Windows平台上。Node.js适合做什么?说了这么多,我们来说说Node.js适用于哪些场景?Node.js在I/O密集场景下的优势主要在于事件循环,非阻塞异步I/O,只开一个线程。我不会为每个请求都创建一个线程,这样会造成资源开销。ResutFulAPI通常我们可以使用Node.js作为中间层,负责组装数据,为前端调用提供API接口。这些数据源可能来自第三方接口或数据库。比如我们后端可能用过Java、PHP等语言,现在我们前端工程师可以通过Node.js来完成,后端可以更专注于业务开发。既然说到ResultFulAPI,顺便推荐一个Node.js开发的开源API管理工具YAPI:https://github.com/YMFE/yapi(这不是广告,但是真的好用.太棒了!忍不住推荐给大家!)。RPC服务RPC(RemoteProcedureCall)的中文名称是“远程过程调用”。大家可能比较陌生,但是在今天的微服务模式下,我们可能服务于功能或者特定的业务形态,所以服务之间的关系我们都知道,一种常见的通信模式是通过HTTP来实现的。了解网络模型的同学可能知道,如果我们现在使用TCP,是不是效率会更高?当然HTTP属于应用层协议。下面是传输层。显然,TCP的形式是很有优势的。RPC服务也是使用的TCP。现在著名的RPC服务如谷歌的gRPC和阿里的Dubble。基础工具可以作为基础工具,比如前端领域的编译器、构建工具、脚手架等。著名的如Webpack和Gulp非常成功。论坛社区Nodeclub是一个使用Node.js和MongoDB开发的社区系统。界面优雅,功能丰富,体积小,速度快。您可以使用它来建立自己的社区。Cnode社区就是一个成功的例子。Cnode地址:https://cnodejs.org/https://github.com/cnodejs/nodeclubBackendForFrontendBackendForFrontend,简称BFF,服务于前端的后端,不是一个新技术,只是逻辑分层。在这一层,我们可以整合一些资源。比如原来的前端需要从三个不同的地方获取资源。那么有了这一层,我们是不是可以做一个聚合,统一处理后返回给前端。同时,后台系统的变更不被授权,导致变更。Serverless是以后会经常听到的一个名词。Serverless是一种“无服务器架构”。不需要开发者关心运维、流量处理等,开发者可以更专注于业务本身。函数作为服务,那么写一个函数就可以实现一个API接口给前端,这样显然可以减少很多开发工作。在JavaScript中,函数是一等公民。在ServerLess场景下,Node.js本身也很轻量,还是有很大优势的。微服务也是近两年很火的词。下面是微服务的几个主要特点:服务小,运行在独立的进程中,可以使用不同的语言。然后这里可以根据业务形态选择不同的语言实现。Node.js本身也非常轻量级并且可以快速实现。在一些I/O密集的场景下还是非常适用的。什么场景选什么工具,没有最好的,只有更合适的!为什么选择Node.js谈谈个人的一些感受和经历。事实上,涉足计算机行业不晚也不早。高中开始编程,学习了很多编程语言,才接触到Node.js。大体曲线是这样的VB(这是高中的),C,C#(.Net),Java,PHP这些都是我上学的时候玩过的东西,接触过前端。确实很复杂,但是没有一个人精通。惨了,大三暑假去北京的一家公司练了两个月的PHP,结果碰到一个做Node.js的同学。作为后端,我在市场上从未见过那种。后来,我简单了解了一下。回校后开始学习Node.js。在学习中,抛开语言层,还有很多东西需要我们继续学习。最后一个建议:不要给自己设界限,比如:我一定要学Node.js或者我一定要学Java或者Python。其实如果条件允许,我也可以接触一些其他的东西。一方面,扩大了自己的境界,另一方面,也能从中受益。Node.js技术栈学习指南路线图这是最近画的一张Node.js技术栈学习指南路线图,从中可以看出我们要学剩下的,不管语言水平如何。欢迎大家关注公众号《Nodejs技术栈》,专注于Node.js相关技术栈的研究与分享。如果你有Node.js相关文章,欢迎投稿!一起成长!