Node.js入门基础

Node.js

归纳

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

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

可是越写越大造成了生态,因而更名为Node.js。node

  • 他只是一个平台,而不是一种独立的语言。
  • 轻量级架构,Java、php等须要运行在服务器上,而Node.js不须要架设在任何服务器软件之上。

特色

  • 单线程
    • 对服务器的要求低,这就限制了她只能作小型微型应用。
    • 和事件驱动联合起来,使得在宏观上看起来是多线程。
    • 一个8G内存的服务器能够同时处理超过4万用户的链接。
    • 例如:张三和李四,张三先启动服务器,张三正在作某件事情,李四的请求来了,先把张三的语法终止,把李四的请求放到一个事件循环当中,放过以后,继续作张三的事情。
  • 非阻塞I/O
    • 当在访问数据库取得数据的时候,须要一段时间,在传统的单线程处理机制中,在返回了访问数据库代码以后,整个线程都将暂停下来,等待数据库返回结果。也就是说,I/O阻塞了代码的执行,极大地下降了程序的执行效率。
  • 事件驱动

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

适合作什么?

特色
  • 善于I/O,不善于计算。
    • Node.js适合与web socket配合,开发长链接的实时交互应用程序。
  • 天生异步。
适用场景
  • 网站开发
  • IM即时通信
  • API
  • Http Proxy
  • 前端构建工具(npm)
  • 跨平台打包工具
  • 写操做系统(NodeOS)
  • 命令行工具
  • 反向代理
  • 。。。
Node.js不是全能的
  • 不适合开发一些银行、证券、电信等一些刚并发场景的开发。
  • 适合一些A轮、B轮的开发。

缩短发送请求到响应的时长

  • 发送请求快一点(客户端网速决定)
  • 响应快一点(服务器带宽、CDN加速…)
  • 服务器请求任务快一点(多线程)
  • 服务器从磁盘读取/写入数据到数据库快一点
    • 磁盘的读取速度有上限
    • 分布式
    • 矩阵式
    • 刀片式
    • …式

V8引擎

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

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

起初的做用:

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

引擎的优点:
  • 强大的编译和快速执行效率
  • 性能很是好
  • 历史包袱轻,没有同步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

相关文章
相关标签/搜索