1、nodejs产生的原因
- 在nodejs出现之前,javascript主要应用于浏览器端;
- Node第一次把JavaScript带入到后端服务器开发,它还提供了运行引擎与相关API,所以nodejs是javascript开发本地应用、服务器应用的一个开发套件;
- 注意了,因为nodejs采用了javascript的语法,所以nodejs不是一种开发语言。
2、浏览器端JS和Node端JS的区别
(1)相同点:就是都使用了Javascript这门语言来开发。
(2)不同点:
- 浏览器端的JS,受制于浏览器提供的接口。比如浏览器提供一个弹对话框的Api,那么JS就能弹出对话框。浏览器为了安全考虑,对文件操作,网络操作,操作系统交互等功能有严格的限制,所以在浏览器端的JS功能无法强大,就像是压在五行山下的孙猴子。
- NodeJs完全没有了浏览器端的限制,让Js拥有了文件操作,网络操作,进程操作等功能,和Java,Python,Php等语言已经没有什么区别了。而且由于底层使用性能超高的V8引擎来解析执行,和天然的异步IO机制,让我们编写高性能的Web服务器变得轻而易举。Node端的JS就像是被唐僧解救出来的齐天大圣一样,法力无边。
3、理解NodeJS的事件驱动和异步IO
- NodeJS在用户代码层,只启动一个线程来运行用户的代码。
- 每当遇到耗时的IO操作,比如文件读写,网络请求,则将耗时操作丢给底层的事件循环去执行,而自己则不会等待,继续执行下面的代码。
- 当底层的事件循环执行完耗时IO时,会执行我们的回调函数来作为通知。
例如:
同步就是你去银行排队办业务,排队的时候啥也不能干(阻塞);
异步就是你去银行用取号机取了一个号,此时你可以自由的做其他事情,到你的时候会用大喇叭对你进行事件通知。而银行系统相当于底层的事件循环,不断的处理耗时的业务(IO)。
NodeJs只有一个线程用来执行用户代码,如果耗时的是CPU计算操作,比如for循环100000000次,那么在循环的过程中,下面的代码将会无法执行,阻塞了唯一的一个线程。Node适合大并发的IO处理,不适合CPU密集型的计算操作。
4、NodeJs能做什么?
- 在浏览器端写JS,其实就是使用浏览器给我们提供的功能和方法来写代码。
- 在Node端写JS,就是用Node封装好的一系列功能模块来写代码。NodeJS封装了网络,文件,安全加密,压缩等等很多功能模块,我们只需要学会常用的一些,然后在需要的时候去查询文档即可。
4.1 npm介绍
npm是Nodejs自带的包管理器,当你安装Node的时候就自动安装了npm。通俗的讲,当我们想使用一个功能时,而Node本身没有提供,那么我们就可以从npm上去搜索并下载这个模块。
每个开发语言都有自己的包管理器,比如,java有maven,python有pip。而npm是目前世界上生态最丰富,可用模块最多的一个社区,没有之一。
基本上,你所能想到的功能都不用自己手写了,它已经在npm上等着你下载使用了。npm的海量模块,使得我们开发复杂的NodeJs的程序变得更为简单。
学习2个知识点:
- 怎么生成
package.json
- 怎么从npm安装包,并保存到
package.json
文件中?
5、Nodejs的优点和缺点
- 优点:Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,异步编程,使其轻量又高效。
- 缺点:单进程,单线程,只支持单核cpu,不能充分的利用多核cpu服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。
参考:https://blog.csdn.net/www294993741/article/details/84585148