请选择 进入手机版 | 继续访问电脑版

nodejs简介

[复制链接]
丁翼 发表于 2020-12-31 18:06:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
开端相识nodejs 一、nodejs的特点



  • 它是一个 javascript 的运行情况
  • 依赖于 V8 引擎举行代码分析
  • 事件驱动
  • 非阻塞 I/O
  • 轻量、可伸缩
node.js 是一个基于 Chrome V8 引擎的 JavaScirpt 运行情况。它最大的优势就是借助JavaScript天生的事件驱动机制加上V8高性能引擎,使编写高性能web更加轻松

二、根本使用

require()引入模块,返回一个模块对象;

代码如下(示例):
  1. const readline = require('readline-sync');//文件模块
复制代码
module.exports()大概exports() 导出一个对象

代码如下(示例):
  1. // index.js// 导出模块module.exports.name = 'nihao;module.exports.sayHello = function(){    console.log('Hello');}// index2.js// 导入模块let obj = require('./index.js');console.log(obj.name); // nihaoobj.sayHello(); // Hello
复制代码


  • 注意:exports是指向module.exports,最终导出的module.exports
npm



  • Node Package manager,“node 包管理器”,上面有各种各样的包
    npm都是一些简单的下令,详情见官网:
    https://www.npmjs.cn/getting-started/installing-node/
  • 默认情况下,我们在拉包的时候,是从 npm 官网上面去拉包,但是在国内,有一个很尴尬的问题,速度很慢,甚至拉包拉不下。国内的淘宝团队在国内搭建了一个镜像服务器,因为服务器在国内,所以速度很快。
    代码如下(示例):
  1. //修改镜像npm config set registry https://registry.npm.taobao.org
复制代码
2.nodejs两个最大的特点 异步无阻塞和事件驱动

异步无阻塞



  • 在 node中,由于接纳异步的方式来处置处罚阻塞代码,所以在回到函数中,接纳错误优先原则。
    代码如下(示例):
  1. const fs = require('fs');console.log('开始写入文件');fs.readFile('./test.txt',function(err,data){    if(err) throw err;    console.log(data.toString());})console.log('竣事写入文件');
复制代码
事件驱动



  • EventEmitter,事件驱动模式
  • EventEmitter 是 node 内里为我们提供的一个模块,允许我们自界说事件。
  1. const EventEmitter = require('events').EventEmitter;const event = new EventEmitter();// 手动界说一个事件event.on('event',function(){    console.log('你触发了这个事件');})// 手动来触发setTimeout(function(){    event.emit('event');},2000);
复制代码
nodejs 系统架构

nodejs 的架构如下图:

该图展示了整个 Node 的运行原理,从左到右,从上到下,整个 Node 被分为了 4 层,分别是应用层V8 引擎层Node API层LIBUV层
应用层:即 JavaScript 交互层,常见的就是 Node 的模块,好比http,fs。
V8 引擎层:纵然用 V8 引擎来分析 JavaScript 语法,进而和下层 API 交互。
NodeAPI 层:为上层模块提供系统调用,一般是由 C 语言来实现,和操作系统举行交互。
LIBUV 层:是跨平台的底层封装,实现了事件循环、文件操作等,是 Node 实现异步的核心。
无论是 Linux 平台照旧 Windows 平台,Node 内部都是通过线程池来完成异步 I/O 操作的,而 LIBUV 针对差异平台的差异性实现了统一调用。


  • 当我们使用 Node.js 的时候,会在 JavaScript 中触发一些下令调用方法,这些方法会被包装成一个对象,放入线程池,然后前面的方法就返回了,继承执行下面的 JavaScript 代码。
线程池中接纳多线程的方式执行,执行完的对象放入事件循环队列。
事件循环队列接纳雷同 while(true) 这种循环的方式,不停的检察是否有事件,而且读取是否包含回调,由于前面回调函数被包装到对象中,这里直接调用执行就可以了。
因此,Node.js 的单线程仅仅是指 JavaScript 运行在单线程中,而并非整个 Node.js 运行情况是单线程。

来源:https://blog.csdn.net/Ultra_Tiga/article/details/111938924
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )