Node.js入门系列(一)

时间:2020-8-23 作者:admin

写在前面

首先要感谢很多私信和评论的小伙伴的信任和鼓励,让我有动力继续写下去。

大前端很大,大到我们常常看不到尽头,零零散散的学习总是让我们无法触类旁通,相互鼓励和”揭短”才能让自己变得更强大,所以我在文末为独行的小伙伴准备了前端大家庭,有她,前端进阶不孤独。我们仰慕技术大佬,而他们也曾像现在的我们,努力学习,苦苦探索。我也曾受益于很多前辈的提点,所以,我深知鼓励和分享对前行者有多大的帮助。一日一钱,千日千钱,绳锯木断,水滴石穿,点滴积累,终将让我们更强。如果有一天你成为了更强大的自己,如果可以,也不要忘记帮帮那些正努力进阶的前行者,无关乎利益,只因我们都有一个共同的目标。

Node.js入门系列将是一整套参考教程,从本节开始,我们正式进入Node.js。系列将以结构脑图、文字解释、概括总结、练习实例、面试考点的形式讲述知识点。虽然学习这个系列不能让你立刻涨薪10K,但学到的知识可以让你心里踏实,更有自信。在此,斗胆向你要个关注和点赞,谨以此,致敬不甘平庸的我们。

上集回顾

上集是系列的漫谈篇,主要谈了Node.js是什么,以及我们为什么要学习Node.js。

如果想再次阅览,请点击这里挑选需要阅读的章节:
漫谈Node.js入门

本节学习目标

正式入门Node.js能解决什么前端痛点问题、Node.js特点及适用场景。

本节学习目录

一 Node.js能解决什么问题?

二 什么项目适合选用Node.js?

三 Node.js安装

四 Node.js应用实例

五 本节小结

六 文末

一、Node.js 能解决什么问题?

❶ 实现高并发用户连接

既然Node.js解决了高并发用户连接的问题,那么反过来想:传统的非Node.js的高并发存在什么问题?Node.js又是通过什么方法解决掉这个问题的呢?

传统的非Node.js的高并发存在什么问题?

在Java、PHP或ASP.NET等服务器语言中,每一个客户端连接都会为其创建一个新的线程,而每个线程耗费大约需要2MB的内存,如果如果我们的服务器是8GB内存,那么理论上最多同时为4000个左右的用户提供服务。如果要想同时为更多的用户提供服务支持,就要增加服务器的数量,这样一来,硬件成本增加了,并且呢,不同服务器之间的数据共享问题也随之而来。所以,为每一个用户连接创建一个新的线程的方案,受服务器内存限制,成为了高并发连接的瓶颈。

Node.js是通过什么改进解决掉这个问题的呢?

Node.js为了解决高并发连接问题,放弃了“为每一个用户连接创建一个新线程”的思想,改成为每一个用户连接在Node.js内部,触发一个事件。这就解决了多个用户连接耗尽服务器内存的问题。至于触发了一个什么事件、如何触发的,我们留到后面在讨论。

❷ 实现高性能服务器

严格的说,Node.js是一个用于开发各种Web服务器的开发工具。在Node.js服务器中,运行的是V8 JavaScript脚本语言。该语言能够被V8 JavaScript引擎解析执行,没错,就是你通过的Chrome 上的V8引擎,Node.js将它用到了服务器上,并且呢,还为它添加了很多新的API,以增强该引擎的能力。光这些还不足以说明Node.js实现的性能有多高,V8引擎内部使用了一种全新的语言编译技术,这种技术可以使得使用JavaScript编写的脚本与通过其他语言(如:C语言)编写的代码具有非常相似的执行效率。(为什么说这个重要呢,后面会讲到,Node.js内部提供了很多的模块,大部分模块是JavaScript编写的,而其他的一些模块是通过其他底层语言编写的,如C语言,V8引擎这种编译技术打破了语言不同造成的执行效率差异问题,使得我们可以忽略掉模块语言差异带来的问题。)

❸ 非阻塞I/O及事件循环机制

前面说到,Node.js将V8引擎用到了服务器端,实现了高性能的服务器。

JavaScript是单线程的语言,V8 JavaScript也是如此。不同于浏览器端JavaScript的是,V8 JavaScript提供了非阻塞I/O机制。什么意思呢?其实就是异步的JavaScript网络请求。在等待请求结果的时候,会继续执行请求后面的代码,不用等待数据返回,将请求返回的结果放在回调函数中处理。这种机制就称为非阻塞I/O机制。由于耗时任务不会阻塞后续代码,因此,大大提供了执行效率。当然,此处是以网络请求为例,但实际上事件可以是:文件的增删查改、

Node.js还有一个事件循环机制

Node.js中的事件循环机制与JavaScript中的事件循环机制很像,但是又有差异,多出了setImmediate 和 process.nextTick这两种异步方式,这些我们后面细讲,这里只要知道:Node.js具有事件循环机制的特点,并且呢,Node.js能实现高并发也是因为其独特的事件循环机制,这种机制与JavaScript中的事件循环机制有相同也有不同,就可以了,暂不深入去考虑。

二、什么项目适合选用Node.js?

根据我们章节中讲过的Node.js的特点,它适用的项目其实就是它的优点,总结如下:

程序需要处理大量并发的输入输出时,并且再向服务端发送请求后,等待返回结果的这段时间内,不需要处理非常复杂的逻辑。

项目示例:
1)聊天服务器;同一时刻可能存在大量并发连接,而服务器端本身不存在非常复杂的处理。
2)电商类服务器:秒杀、抢购、准点开卖等场景。

三、Node.js安装

Node.js安装包官网下载地址:

下载安装包,选择安装位置后一直“下一步”就可以了。

四、Node.js应用实例

安装好以后,开始我们第一个项目,输出“Hello World”

步骤一:打开代码编辑器,新建一个文件,保存为hello.js
步骤二:在页面中,使用require引入模块(require的引入方式是common.js的引入方式),代码为:

var http = require("http");

步骤三:我们使用http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。整个页面的代码写法如下:

var http = require('http');http.createServer(function (request, response) {    // 发送 HTTP 头部    // HTTP 状态值: 200 : OK    // 内容类型: text/plain    response.writeHead(200, {'Content-Type': 'text/plain'});    // 发送响应数据 "Hello World"    response.end('Hello World\n');}).listen(8888);// 终端打印如下信息console.log('Server running at http://127.0.0.1:8888/');

步骤四:通过上面的代码,我们就完成了一个可以工作的HTTP服务器。现在,到了执行的时候了,打开一个终端,路径定位到hello.js目录下(如果是在vscode中,可以按Ctrl + ` 调出终端),接下来在终端中输入命令:

node hello.js

步骤五:接下来,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 “Hello World”的网页。

五、本节小结

本节主要是了解Node.js能解决什么问题,有什么特点,适用哪些项目。

总结如下:

  1. Node.js编写前需要先安装一个Node.js软件,然后才能正常使用;
  2. Node.js编写的文件也是以.js结尾的js文件,跟浏览器端编写的js文件一样;
  3. Node.js文件运行需要使用到终端命令执行,然后才能在浏览器中呈现,而浏览器端js只需要用浏览器打开就可以;
  4. Node.js编写代码时,常常需要引入模块,还会使用到模块提供的很多方法和属性,而浏览器端js使用的是ECMA提供的API和BOM对象提供的API,基本不需要引入模块,而且引入方式也不同,Node.js遵循common.js标准,使用require引入一个模块,而浏览器端js遵循ES modules标准,通过import引入文件或模块;模块的知识会放到下一节细讲,本节主要是先体验,有初印象。
  5. Node.js通过终端运行,不存在兼容性问题,而浏览器端JavaScript由于依赖于浏览器环境,因此浏览器不同可能会出现兼容性问题。

本小节就是这些,下一节会继续更新,欢迎继续关注~

文末

只写看得懂、读得懂、有价值的技术文章;

看完觉得有收获,点赞 + 关注,平台会为你推荐更多优质主题文章;

在准备面试?来交流一下吧,每天一到面试题提升自我;准备进阶高级全栈?来聊聊进阶之道,少走弯路;敲代码累了?来群里聊聊天吧,让工作更高效。
由于限制,目前已满200,只能通过邀请加入,所以,还请添加我的个人,我再邀请进入。来这里,找到更多志同道合的前端伙伴~

Node.js入门系列(一)

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。