當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

對Node.js 的理解?優(yōu)缺點(diǎn)?應(yīng)用場景?
2022-05-29 22:34:13

概念

是一個(gè)基于Chrome V8引擎的JavaScript運(yùn)行環(huán)境,讓JavaScript 運(yùn)行在服務(wù)端的開發(fā)平臺(tái)。Node. js是一個(gè)事件驅(qū)動(dòng)、非阻塞式I/O的模型,輕量而又高效。瀏覽器是js的前端運(yùn)行環(huán)境

node.js是js的后端運(yùn)行環(huán)境。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

處理高并發(fā)場景性能更佳

適合I/O密集型應(yīng)用,指的是應(yīng)用在運(yùn)行極限時(shí),CPU占用率仍然比較低,大部分時(shí)間是在做 I/O硬盤內(nèi)存讀寫操作

缺點(diǎn)

不適合CPU密集型應(yīng)用(如復(fù)雜的數(shù)學(xué)計(jì)算)

只支持單核CPU,不能充分利用CPU

可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰

適用場景

高并發(fā)、實(shí)時(shí)聊天、實(shí)時(shí)消息推送、客戶端邏輯強(qiáng)大的SPA(單頁面應(yīng)用程序)。

應(yīng)用場景

第一大類:用戶表單收集系統(tǒng)、后臺(tái)管理系統(tǒng)、實(shí)時(shí)交互系統(tǒng)、考試系統(tǒng)、聯(lián)網(wǎng)軟件、高并發(fā)量的web應(yīng)用程序

第二大類:基于web、canvas等多人聯(lián)網(wǎng)游戲

第三大類:基于web的多人實(shí)時(shí)聊天客戶端、聊天室、圖文直播

第四大類:單頁面瀏覽器應(yīng)用程序

第五大類:操作數(shù)據(jù)庫、為前端和移動(dòng)端提供基于json的API

node與Javascript的區(qū)別

為什么要用Node.js

(1)簡單, Node. js用 JavaScript、JSON進(jìn)行編碼,簡單好學(xué)。

(2)功能強(qiáng)大,非阻塞式I/O,在較慢的網(wǎng)絡(luò)環(huán)境中,可以分塊傳輸數(shù)據(jù),事件驅(qū)動(dòng),擅長高并發(fā)訪問。

(3)輕量級, Node. js本身既是代碼又是服務(wù)器,前后端使用同一語言。

(4)可擴(kuò)展,可以輕松應(yīng)對多實(shí)例、多服務(wù)器架構(gòu),同時(shí)有海量的第三方應(yīng)用組件。

  • 非阻塞I/O是指以異步來執(zhí)行函數(shù),先執(zhí)行同步任務(wù),耗時(shí)任務(wù)放在事件隊(duì)列中,以此輪詢執(zhí)行
  • 高并發(fā)是指許多用戶同時(shí)訪問相同 API接口或 URL地址。這種情況常常發(fā)生在活躍用戶數(shù)量大、用戶聚集程度高的業(yè)務(wù)場景中。

Node. js 有哪些全局對象?

在瀏覽器 JavaScript 中,通常window 是全局對象, 而 Nodejs中的全局對象是 global,global全局對象則在全局作用域中,任何全局變量、函數(shù)、對象都是該對象的一個(gè)屬性值

全局對象分類

1.真正的全局對象

Buffer

可以處理二進(jìn)制以及非Unicode編碼的數(shù)據(jù)

process

進(jìn)程對象,提供有關(guān)當(dāng)前進(jìn)程的信息和控制

console

最常用的輸入內(nèi)容的方式:console.log/console. info、console.error/console.warning、console.time/console.timeEnd 、console.trace、console .table。

clearInterval、setInterval

設(shè)置定時(shí)器與清除定時(shí)器

clearTimeout、setTimeout

設(shè)置延時(shí)器與清除延時(shí)器

global

全局命名空間對象,process、console、setTimeout等都有放到global中

2.模塊級別的全局變量

__dirname

獲取當(dāng)前文件所在的路徑,不包括后面的文件名

__filename

獲取當(dāng)前文件所在的路徑和文件名稱,包括后面的文件名稱

exports

module.exports 用于指定一個(gè)模塊所導(dǎo)出的內(nèi)容,即可以通過 require() 訪問的內(nèi)容

module

對當(dāng)前模塊的引用,通過module.exports 用于指定一個(gè)模塊所導(dǎo)出的內(nèi)容,即可以通過 require() 訪問的內(nèi)容

require

用于引入模塊、 JSON、或本地文件。 可以從 node_modules 引入模塊。

Node.js核心模塊

EventEmitter 、Stream、FS、Net和全局對象等。

對 Node.js 中的 process 的理解?有哪些常用方法

概念

process 對象是一個(gè)全局變量,提供了有關(guān)當(dāng)前 Node.js進(jìn)程的信息并對其進(jìn)行控制

屬性

process.env:環(huán)境變量,例如通過 `process.env.NODE_ENV 獲取不同環(huán)境項(xiàng)目配置信息

process.nextTick:這個(gè)在談及 EventLoop 時(shí)經(jīng)常為會(huì)提到

process.pid:獲取當(dāng)前進(jìn)程id

process.ppid:當(dāng)前進(jìn)程對應(yīng)的父進(jìn)程

process.cwd():獲取當(dāng)前進(jìn)程工作目錄,

process.platform:獲取當(dāng)前進(jìn)程運(yùn)行的操作系統(tǒng)平臺(tái)

process.uptime():當(dāng)前進(jìn)程已運(yùn)行時(shí)間,例如:pm2 守護(hù)進(jìn)程的 uptime 值

進(jìn)程事件: process.on(‘uncaughtException’,cb) 捕獲異常信息、 process.on(‘exit’,cb)進(jìn)程推出監(jiān)聽

三個(gè)標(biāo)準(zhǔn)流: process.stdout 標(biāo)準(zhǔn)輸出、 process.stdin 標(biāo)準(zhǔn)輸入、 process.stderr 標(biāo)準(zhǔn)錯(cuò)誤輸出

process.title 指定進(jìn)程名稱,有的時(shí)候需要給進(jìn)程指定一個(gè)名稱

方法

process.cwd()

返回當(dāng)前 Node進(jìn)程執(zhí)行的目錄

process.argv

在終端通過 Node 執(zhí)行命令的時(shí)候,通過 process.argv 可以獲取傳入的命令行參數(shù),返回值是一個(gè)數(shù)組

process.env

返回一個(gè)對象,存儲(chǔ)當(dāng)前環(huán)境相關(guān)的所有信息,一般很少直接用到。

process.nextTick()

NodeJs是基于事件輪詢,在這個(gè)過程中,同一時(shí)間只會(huì)處理一件事情,在這種處理模式下,process.nextTick()就是定義出一個(gè)動(dòng)作,并且讓這個(gè)動(dòng)作在下一個(gè)事件輪詢的時(shí)間點(diǎn)上執(zhí)行

Node. js中的異步和同步

Node.js是單線程的,異步是通過一次次的循環(huán)事件隊(duì)列來實(shí)現(xiàn)的。同步則是阻塞式的IO,這在高并發(fā)環(huán)境中會(huì)是一個(gè)很大的性能問題,所以同步一般只在基礎(chǔ)框架啟動(dòng)時(shí)使用,用來加

載配置文件、初始化程序等。

本文摘自 :https://www.cnblogs.com/

開通會(huì)員,享受整站包年服務(wù)立即開通 >