Node.js从入门到放弃(一)


  • 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊
  • 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python系列课程
    在这里插入图片描述

前言

这是该系列文章的第一篇,主要对Node进行一个简单的介绍

Node.js是什么

Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端,可以与PHP、JSP、Python、Ruby平起平坐。Node.js不是一种独立的语言,也不是框架,与PHP、JSP、Python、Perl、Ruby的“既是语言,也是平台”不同,Node.js的使用JavaScript进行编程,运行在JavaScript引擎上(如V8)。懂js,上手node很快。

Node.js的优势

善于处理高并发,IO读写能力强,节约硬件成本

Node.js官网

https://nodejs.org/en/

三大特点

单线程

在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程,而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然随之上升。Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上是并行。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。
单线程优点: 操作系统完全不再有线程创建、销毁的时间开销。

  • 单线程缺点:某个线程崩溃,整个服务都会崩溃。

非阻塞I/O

Node.js使用的是非阻塞I/O,换句话说,异步。异步代码不会像同步代码那样阻塞后续代码运行,一个线程的CPU核心利用率永远是100%。当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。检查每个事件是否执行完毕以及执行栈的运行过程,就是事件循环。
下面的代码会先打印1,即便延迟时间为0

setTimeout(()=>{
  console.log(0)
},0)

console.log(1)

事件驱动

在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为事件环机制。Node.js底层是C++(V8也是C++写的)。底层代码中,近半数都用于事件队列、回调函数队列的构建。
用事件驱动来完成服务器的任务调度,就如同用一个线程,担负起了处理非常多的任务的使命。

适用场景

  • 涉及高并发和频繁的IO处理程序

  • 与socket配合,开发长连接的实时交互应用程序。(聊天室)

  • 为前台提供数据接口(不涉及高密度计算)

Node.js中的js

Node.js和运行在浏览器端的js很像,变量+方法+数据类型+内置对象(Array+Object+ Date+ Math)和js是一致的,同时,也有差异性。Node.js内置很多核心模块(如fs,os,dns,http…),没有全局对象window,也没有BOM,DOM。

模块系统

在Node中每一个文件就是一个完全封闭的模块,可以避免变量命名冲突污染。模块之间通过require实现模块加载,使用exports和module.exports进行模块导出。

// a.js

var name="tom";

exports.name=name

//b.js

var a=require("./a")

console.log(a.name)//tom


大多数场景,这两个的使用方式是一样的,但module.exports更好用一些。exports使用的时候是exports.xxx=xxx,必须以对象的形式使用而不能直接赋值,否则就改变了exports的指向,而它原本就是module的一个属性。

// 错误的写法 将会得到 undefined
exports = {
  'a': 1,
  'b': 2
}

// 正确的写法
module.exports = {
  'a': 1,
  'b': 2
}

模块类型

Node中常见的模块类型三种,核心模块,文件模块,第三方模块.
文件模块引用需要加入相对路径,核心模块和第三方模块(安装后) 可以直接引入

核心模块

  • fs 文件操作模块

  • http 网络服务构建模块

  • os 操作系统信息模块

  • path 路径处理模块

文件模块

  • 自定义的.js文件

第三方模块

  • react

  • vue

  • jquery

  • …来自npm的其他模块

发布了396 篇原创文章 · 获赞 786 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/103943144