自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說說對 Node 中的 Process 的理解?有哪些常用方法?

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

[[403406]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

一、是什么

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

我們都知道,進(jìn)程計算機(jī)系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ),是線程的容器

當(dāng)我們啟動一個js文件,實際就是開啟了一個服務(wù)進(jìn)程,每個進(jìn)程都擁有自己的獨立空間地址、數(shù)據(jù)棧,像另一個進(jìn)程無法訪問當(dāng)前進(jìn)程的變量、數(shù)據(jù)結(jié)構(gòu),只有數(shù)據(jù)通信后,進(jìn)程之間才可以數(shù)據(jù)共享

由于JavaScript是一個單線程語言,所以通過node xxx啟動一個文件后,只有一條主線程

二、屬性與方法

關(guān)于process常見的屬性有如下:

  • process.env:環(huán)境變量,例如通過 `process.env.NODE_ENV 獲取不同環(huán)境項目配置信息
  • process.nextTick:這個在談及 EventLoop 時經(jīng)常為會提到
  • 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)程運行的操作系統(tǒng)平臺
  • process.uptime():當(dāng)前進(jìn)程已運行時間,例如:pm2 守護(hù)進(jìn)程的 uptime 值
  • 進(jìn)程事件:process.on(‘uncaughtException’,cb) 捕獲異常信息、 process.on(‘exit’,cb)進(jìn)程推出監(jiān)聽
  • 三個標(biāo)準(zhǔn)流:process.stdout 標(biāo)準(zhǔn)輸出、 process.stdin 標(biāo)準(zhǔn)輸入、 process.stderr 標(biāo)準(zhǔn)錯誤輸出
  • process.title 指定進(jìn)程名稱,有的時候需要給進(jìn)程指定一個名稱

下面再稍微介紹下某些方法的使用:

process.cwd()

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

一個Node 模塊 A 通過 NPM 發(fā)布,項目 B 中使用了模塊 A。在 A 中需要操作 B 項目下的文件時,就可以用 process.cwd() 來獲取 B 項目的路徑

process.argv

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

0: Node 路徑(一般用不到,直接忽略)

1: 被執(zhí)行的 JS 文件路徑(一般用不到,直接忽略)

2~n: 真實傳入命令的參數(shù)

所以,我們只要從 process.argv[2] 開始獲取就好了

  1. const args = process.argv.slice(2); 

process.env

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

一般我們會在 process.env 上掛載一些變量標(biāo)識當(dāng)前的環(huán)境。比如最常見的用 process.env.NODE_ENV 區(qū)分 development 和 production

在 vue-cli 的源碼中也經(jīng)常會看到 process.env.VUE_CLI_DEBUG 標(biāo)識當(dāng)前是不是 DEBUG 模式

process.nextTick()

我們知道NodeJs是基于事件輪詢,在這個過程中,同一時間只會處理一件事情

在這種處理模式下,process.nextTick()就是定義出一個動作,并且讓這個動作在下一個事件輪詢的時間點上執(zhí)行

例如下面例子將一個foo函數(shù)在下一個時間點調(diào)用

  1. function foo() { 
  2.     console.error('foo'); 
  3.  
  4. process.nextTick(foo); 
  5. console.error('bar'); 

輸出結(jié)果為bar、foo

雖然下述方式也能實現(xiàn)同樣效果:

  1. setTimeout(foo, 0); 
  2. console.log('bar'); 

兩者區(qū)別在于:

  • process.nextTick()會在這一次event loop的call stack清空后(下一次event loop開始前)再調(diào)用callback
  • setTimeout()是并不知道什么時候call stack清空的,所以何時調(diào)用callback函數(shù)是不確定的

參考文獻(xiàn)

http://nodejs.cn/api/process.html

 

https://vue3js.cn/interview/

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-06-04 07:55:30

Node Fs 操作

2021-06-07 09:41:48

NodeBuffer 網(wǎng)絡(luò)協(xié)議

2021-06-08 08:33:23

NodeStream數(shù)據(jù)

2021-06-10 07:51:07

Node.js循環(huán)機(jī)制

2021-10-29 09:40:21

設(shè)計模式軟件

2021-06-30 07:19:36

React事件機(jī)制

2021-07-19 07:55:24

Redux中間件原理

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2021-08-11 08:53:23

Git命令面試

2021-07-12 08:35:24

組件應(yīng)用場景

2021-07-07 08:36:45

React應(yīng)用場景

2021-09-13 09:23:52

TypeScript命名空間

2021-06-15 10:01:02

應(yīng)用系統(tǒng)軟件

2021-06-02 09:42:29

Node. js全局對象

2021-07-13 07:52:03

ReactHooks組件

2024-07-26 08:10:10

2021-09-26 10:57:16

集合操作場景

2021-09-27 06:50:04

非線性數(shù)據(jù)

2021-07-08 06:51:29

React函數(shù)組件

2021-07-29 07:55:20

React Fiber架構(gòu)引擎
點贊
收藏

51CTO技術(shù)棧公眾號