Node.js入门基础

Node.js

概括

是一个能够让JS代码在服务器端运行的开发平台。

一开始只是用于写高性能Web服务器的。

但是越写越大形成了生态,于是改名为Node.js。

  • 他只是一个平台,而不是一种独立的语言。
  • 轻量级架构,Java、php等需要运行在服务器上,而Node.js不需要架设在任何服务器软件之上。
特点
  • 单线程
    • 对服务器的要求低,这就限制了她只能做小型微型应用。
    • 和事件驱动联合起来,使得在宏观上看起来是多线程。
    • 一个8G内存的服务器可以同时处理超过4万用户的连接。
    • 例如:张三和李四,张三先启动服务器,张三正在做某件事情,李四的请求来了,先把张三的语法终止,把李四的请求放到一个事件循环当中,放过之后,继续做张三的事情。
  • 非阻塞I/O
    • 当在访问数据库取得数据的时候,需要一段时间,在传统的单线程处理机制中,在返回了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。
  • 事件驱动

Node.js当中所有的I/O都是异步的,都是回调函数套用回调函数。

适合做什么?
特点
  • 善于I/O,不善于计算。
    • Node.js适合与web socket配合,开发长连接的实时交互应用程序。
  • 天生异步。
适用场景
  • 网站开发
  • IM即时通讯
  • API
  • Http Proxy
  • 前端构建工具(npm)
  • 跨平台打包工具
  • 写操作系统(NodeOS)
  • 命令行工具
  • 反向代理
  • 。。。
Node.js不是全能的
  • 不适合开发一些银行、证券、电信等一些刚并发场景的开发。
  • 适合一些A轮、B轮的开发。
缩短发送请求到响应的时长
  • 发送请求快一点(客户端网速决定)
  • 响应快一点(服务器带宽、CDN加速…)
  • 服务器请求任务快一点(多线程)
  • 服务器从磁盘读取/写入数据到数据库快一点
    • 磁盘的读取速度有上限
    • 分布式
    • 矩阵式
    • 刀片式
    • …式
V8引擎

一款专门对JS语言进行解释和执行的流程虚拟机

只要V8引擎能够嵌入到不同的宿主环境中,那么就可以用JS语言来写各种不同领域的应用。

起初的作用:

用于Chrome浏览器解析JS脚本。

引擎的优势:
  • 强大的编译和快速执行效率
  • 性能非常好
  • 历史包袱轻,没有同步I/O
  • 强大的事件驱动机制
Node模块化开发
CommonJS规范
  • 从文件角度来看,每个JS文件就是一个模块
  • 从结构上来看,多个JS文件之间可以相互require
  • 在Node.js中,一个模块中定义的变量、函数等,都只能在这个文件内部有效,当需要从此文件外部引用这些变量、函数时,必须使用exports进行暴露。使用者通过require引用。
模块标识

当我们使用require()引入外部模块时,使用的就是模块标识

  • 内建模块
    • 底层是由C++编写
  • 文件模块
    • 由用户自己创建的模块
  • 核心模块
    • 由node引擎提供的模块
    • 由node_modules提供的模块
exports和require怎么来的?

函数参数

每一个js文件都是一个node模块,同时也是一个匿名自调函数。

当node在执行模块中的代码时,他会首先在代码的最顶部,添加如下代码:

function (exports, require, module, __filename, __dirname){}

然后在最低端,添加}

So:

模块中的代码都是包装在一个函数中执行的,并且在函数执行的同时传递了5个实参。

5个实参
  • exports
    • 该对象用来将函数内部的局部变量或局部函数暴露到外部。
  • requires
    • 用来引入外部的模块。
  • module
    • 代表的是当前模块本身,exports就是module的属性;
    • 我们既可以用exports导出,也可以用module.exports导出
  • __filename
    • 当前模块的完整路径
  • __dirname
    • 当前模块所在文件夹的完整路径。
exports和module.exports的区别

值类型和引用类型

两者区别

exports只能使用.语法来向外暴露内部变量。exports.xxx = xxx;

module.exports既可以通过.语法,也可以直接赋值一个对象。

包和包管理器
package
概念:

Common.JS的报规范允许我们将一组相关的模块组合到一起,形成一组完整的工具,这组工具就叫做包。

组成

实际上就是一个压缩文件,解压之后还原为目录

  • package.json包描述文件
  • bin 可执行二进制
  • lib js代码
  • doc 文档
  • test 单元测试
package.json

描述包的相关信息,以供外部读取分析。

它是一个JSON格式的文件。

PS:该文件禁止添加注释。


NPM包管理工具

Node Package Manager

如果页面中引入node_modules中某个模块,有先从当前目录引入,如果没有,则往上级查找,直到根目录。

CNPM

淘宝镜像官网

在官网可以找到使用方式:

https://npm.taobao.org

转载于:https://www.cnblogs.com/yjz6/p/9799608.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值