node和npm

本文介绍了Node.js的包管理工具npm,详细讲述了npm的功能和使用场景。接着,文章深入探讨了Node.js的历史、概念以及特点,重点讨论了Node.js的单线程、非阻塞I/O和事件驱动特性。此外,还涵盖了Node.js的安装过程和如何搭建简单服务器。
摘要由CSDN通过智能技术生成

npm介绍

在正式开始Node.js学习之前,我们先认识一下npm。npm是什么东东?npm其实是Node.js的包管理工具

(node package manager)

包可以理解为实现了某个功能模块的集合,用于分布和维护;
包是在模块基础上更深一步的抽象,node.js包类似c++函数库或者Java的类库,他将某个独立的功能封装起来,用于发布,更新,依赖管理和版本控制,node.js根据是CommonJs实现了包的机制;用npm解决包的发布和获取的需求;

包管理器npm
npm用于包的发布,传播,依赖控制,npm提供了命令行可以方便下载,安装,升级,删除;也可以发布和维护包;

NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。以下介绍NPM应用的三种场景:在这里插入图片描述为啥我们需要一个包管理工具呢?

npm用于包的发布,传播,依赖控制,npm提供了命令行可以方便下载,安装,升级,删除;也可以发布和维护包;

一、获取一个包

npm   [install/i]     [packagename]
安装在当前目录的node_modules子目录下。

包的发布
发布之前,需要让包符合npm的规范,npm有一套以CommonJS为基础的包规范;通过使用:

npm init 

交互式问答产生一个符合标准的package.json,步骤是:
(1)先创建一个目录(package)
(2)在这个目录中运行npm init,产生一系列的问题,
(3)最后填完问题,产生一个标准的package.json

讲了这么多,npm究竟在哪?其实npm已经在Node.js安装的时候顺带装好了。我们在命令提示符或者终端输入npm -v
在这里插入图片描述

上面的一大堆文字告诉你,npm需要跟上命令。现在我们不用关心这些命令,后面会一一讲到。目前,你只需要确保npm正确安装了,能运行就行。

我们的依赖包,可能随时更新,我们永远想保持更新,或者保持一个版本检测,我们就可以用package来管理依赖。

检测package.json,安装package中的所有依赖

1.1 node简介(**)(40’)

1.1.1 历史(**)(10’)

话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,最终,Ryan瞄向了JavaScript。因为JavaScript是单线程执行,也就是说,同一个时间只能做一件事,效率就会很低。但是可以利用js单线程事件循环来提高效率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxYUy23C-1584586191876)(C:\Users\94560\AppData\Roaming\Typora\typora-user-images\image-20200318160428025.png)]

选定了开发语言,还要有运行时引擎。这位仁兄曾考虑过自己写一个,不过明智地放弃了,因为V8就是开源的JavaScript引擎。让Google投资去优化V8,咱只负责改造一下拿来用,还不用付钱,这个买卖很划算。

Chrome V8 简称 V8,是由谷歌开源的一个高性能 JavaScript 引擎。该引擎采用 C++ 编写,Google Chrome 浏览器用的就是这个引擎。其他的 JavaScript 引擎一样,V8 会编译、执行 JavaScript 代码,并一样会管理内存、垃圾回收等。

于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。

1.2 node概念(10’)

node简介:

V8引擎本身就是用于Chrome浏览器的JS解释部分,但是Ryan Dahl这哥们,鬼才般的,把这个V8搬到了服务器上,用于做服务器的软件。

Node.js是一个专注于实现高性能Web服务器优化的专家,几经探索,几经挫折后,遇到V8而诞生的项目。

Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端,可以与PHP、JSP、Python、Ruby平起平坐。

但Node似乎有点不同:

Node.js****不是一种独立的语言,与PHP、JSP、Python、Perl、Ruby的“既是语言,也是平台”不同,Node.js的使用JavaScript****进行编程,运行在JavaScript引擎上(V8)。

● 与PHP、JSP等相比(PHP、JSP、.net都需要运行在服务器程序上,Apache、Naginx、Tomcat、IIS。

),Node.js跳过了Apache、Naginx**、IIS等HTTP服务器,它自己不用建设在任何服务器软件之上**。Node.js的许多设计理念与经典架构(LAMP = Linux + Apache + MySQL + PHP)有着很大的不同,可以提供强大的伸缩能力。一会儿我们就将看到,Node.js没有web容器。

Node.js自身哲学,是花最小的硬件成本,追求更高的并发,更高的处理性能。

node特点:单线程、非阻塞IO 事件驱动

所谓的特点,就是Node.js是如何解决服务器高性能瓶颈问题的。

1 、单线程

在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。

Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。

另外,带线程的带来的好处,还有操作系统完全不再有线程创建销毁的时间开销减少服务器内存开销

坏处,就是一个用户造成了线程的崩溃,整个服务都崩溃了,其他人也崩溃了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ug181bjI-1584586191877)(C:\Users\94560\AppData\Roaming\Typora\typora-user-images\image-20200318145241175.png)]

多线程、单线程的一个对比。也就是说,单线程也能造成宏观上的“并发”。

2、非阻塞I/O

例如,当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说I/O阻塞了代码的执行,极大地降低了程序的执行效率。**

由于Node.js中**采用了非阻塞型I/O机制,**因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。

当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。

阻塞模式下,一个线程只能处理一项任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值