nodejs(一)概述

Node.js 概述Node.js 是一个能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。Node.js 由 Node.js 基金会持有和维护,并与 Linux 基金会有合作关系。Node.js 采用 Google 开发的 V8 运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于数据密...
摘要由CSDN通过智能技术生成

Node.js 概述

Node.js 是一个能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。Node.js 由 Node.js 基金会持有和维护,并与 Linux 基金会有合作关系。Node.js 采用 Google 开发的 V8 运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于数据密集的即时应用程序。

这些名词很容易把人弄晕,我一个个浅显的解释一下.

传统的web客户端-服务器端的流程是,当浏览器给网站发了请求。服务器收到了请求然后开始搜寻被请求的资源。如果有需要,服务器还会查询一下数据库,最后把响应结果传回浏览器。

每一个请求都会让服务器创建一个新的进程来处理这个请求,返回全部的web内容并刷新,HTTP请求不是持续的连接,你请求一次,服务器响应一次,然后就完了。后来使用Ajax,每次只请求需要的部分页面信息就可以了,即让用户和服务器之间保持长轮询(long polling)。简单来说,当实时页面载入完毕,浏览器自动发送一个Ajax请求,要求服务器等待,实时页面更新时,如新添加了资讯消息等,服务器将当前页面动态更新的内容返回浏览器,浏览器刷新页面显示新页面,同时浏览器接着自动发送一个Ajax请求,在这个过程中,模拟出了持续连接的过程。

很显然,每个连接都得让服务器开一个新的进程,因为你要动态更新页面,就得一直保持连接,每开一个进程都消耗不小的内存,这并发量谁顶得住啊(又得吐槽一下学校的内网,每次选课直接就瘫了)。

这种情况怎么解决?解决方法就是刚才上边说的:非阻塞和事件驱动。

简单说一下阻塞与非阻塞。这些概念需要分层次理解,不同层的概念大相径庭。这里从并发的角度讲一讲,

阻塞:线程调用某个结果,结果返回之前,当前线程会被挂起(多个线程访问同一个资源,资源上锁了就排队)。调用线程只有在得到结果之后才会返回。
非阻塞:某个线程处理请求,在不能立刻得到结果之前,接着进行处理,结果返回时来个回调,告诉你处理完了,把结果响应回去。

事件驱动:服务器只在用户那边有事件发生的时候才响应,这就是事件驱动。业务逻辑上,你在网页上点了什么按钮,服务器响应相应的内容。

 

Node.js 大部分基本模块都用 JavaScript 语言编写。在 Node.js 出现之前,JavaScript 通常作为客户端程序设计语言使用,以 JavaScript 写出的程序常在用户的浏览器上运行。Node.js 的出现使 JavaScript 也能用于服务端编程。Node.js 含有一系列内置模块,使得程序可以脱离 Apache HTTP Server 或 IIS,作为独立服务器运行。

针对Node.js更具体的说

Node.js是一个 JavaScript 运行环境。javascript不仅仅可以在浏览器中的页面运行实现动态页面,它也可以运行在服务器端.

依赖于 Chrome V8 引擎进行代码解释。

事件驱动:在 Node 中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在 Node 中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件,然后返回继续执行原事件的回调函数。

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

Node.js是单线程:好处是减少内存开销,不用像多线程编程那样处处在意状态同步的问题。缺点是错误会引起整个应用退出。

NPM 介绍

NPM 是随同 Node.js 一起安装的包管理工具。因此当我们安装好 Node.js 的时候,也安装好了 NPM。NPM 是一个命令行工具,用于从 NPM Registry 中下载、安装 Node.js 程序,同时解决依赖问题

 

node只是一个运行环境,而在node上许多人发布了各式各样的包,包中的每一个js文件为一个模块,通过使用各式各样的模块,相当于使用类库编程

node.js中的全局变量

在 JavaScript 中全局对象通常是 window,而在 Node.js 中全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性,我们可以直接访问到 global 的属性。

全局变量

按照 ECMAScript 的定义,满足以下条 件的变量是全局变量:

  • 在最外层定义的变量

  • 全局对象的属性

  • 隐式定义的变量(未定义直接赋值的变量)

注:当你定义一个全局变量的时候,这个变量同时也会成为全局对象的属性,反之亦然。在 Node.js 中你不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。定义变量一定要使用 var 关键字,因为全局变量会污染命名空间。

node中的一些全局变量

1.__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。如果在模块中,返回的值是模块文件的路径。

2.__dirname,表示当前执行脚本所在的目录。

node中的一些全局函数

1.setTimeout(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb),只执行一次函数。

2.clearTimeout(t) 用于停止一个之前通过 setTimeout() 返回的对象。 参数 t 是通过 setTimeout() 函数创建的返回的对象。

3.setInterval(cb, ms) 与 setTimeout(cb, ms) 类似,不同的是这个方法会不停的执行函数。直到 clearInterval() 被调用或窗口被关闭,也可以按 Ctrl+C 停止。

4.console.log() 是个全局函数用于进行标准输出流的输出,即在控制台中显示一行字符串,和 JavaScript 中的使用一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值