Nodejs 入門

nodejs 是什么

nodejs is a JavaScript runtime built on Chrome's V8
nodejs 并不是一門語言,而是一個運行環(huán)境
特點:

  • 事件驅(qū)動
  • 非阻塞 I/O

非阻塞I/O

  • 阻塞:I/O時進程休眠等待I/O完成后進行下一步。
  • 非阻塞:I/O時函數(shù)立即返回,進程不等待I/O完成。

事件驅(qū)動

  • I/O等異步操作結(jié)束后的通知
  • 觀察者模式

為什么前端偏愛nodejs

  • 前端職責范圍變大,統(tǒng)一開發(fā)體驗
  • 在處理高并發(fā),I/O密集場景性能優(yōu)勢明顯

CPU密集 VS I/O密集

  • CPU密集: 壓縮、解壓、加密、解密
  • I/O密集: 文件操作、網(wǎng)絡操作、數(shù)據(jù)庫

web 常見場景

  • 靜態(tài)資源讀取
  • 數(shù)據(jù)庫操作
  • 渲染頁面

高并發(fā)應對之道

  • 增加機器數(shù)
  • 增加每臺機器的CPU數(shù)——多核

進程

  • 進程:是計算機中的程序關于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位
  • 多進程:啟動多個進程,多個進程可以一塊執(zhí)行多個任務

nodejs 環(huán)境

  • nodejs 官網(wǎng):https://nodejs.org/en/
  • CommonJS: 模塊化規(guī)范
  • global: 全局對象,nodejs 沒有 DOM、BOM,全局是global
  • process: 進程

一個栗子

image

nodejs 自動幫我們做了,外面包了一個函數(shù),實現(xiàn)模塊化。

CommonJS

  • 每個文件是一個模塊,有自己的作用域,比如上面栗子,外面包裹了一個函數(shù),就變成了局部作用域了。
  • 在模塊內(nèi)部 module 變量代表模塊本身。
  • module.exports 屬性代表模塊對外的接口

require 規(guī)則

  • / 表示絕對路徑,./ 表示相對于當前文件的相對路徑
  • 支持 js、json、node 拓展名,不寫的話就會依次嘗試。
  • 不寫路徑則認為是 build-in 內(nèi)部自帶的模塊或者各級 node_modules 內(nèi)的第三方模塊。

require 特性

  • module 被加載的時候執(zhí)行,加載后緩存,也就第一次加載并執(zhí)行,第二次有緩存就不加載了。
  • 一旦出現(xiàn)某個模塊被循環(huán)加載,就只輸出已執(zhí)行的部分,還未執(zhí)行的部分不會輸出。(太繞了,要避免循環(huán)引用)

nodejs 內(nèi)置模塊

api文檔

  • fs 文件系統(tǒng)模塊,用來做文件的讀寫,

第三方模塊 node_modules

  • chalk 模塊,可以讓輸出帶顏色。
    image

    image

module.exports 與 exports 的區(qū)別

const exports = modules.exports
    //exports 是 module.exports 的快捷方式
    
exports.test = 100;
    //可以給 exports 添加屬性。
    
exports = {
    test: 150
}   //這是錯誤的用法,因為改變了 exports 的指向,模塊輸出找不到。

module.exports = {
    test: 200
}   //這是可以的,因為輸出的模塊是 module.exports

global 全局對象

  • CommonJS
  • Buffer:處理二進制數(shù)據(jù)流
  • process:進程
  • console
  • timer

把變量賦給 global 對象作為屬性,則所有的文件都能拿到該變量。

timer

  • setImmediate:下一個事件隊列的隊首。
  • setTimeout:定時執(zhí)行,最快是在兩個事件隊列之間。
  • process.nextTick:當前事件隊列的隊尾。

來看一下三個的執(zhí)行順序


image
image

可以看到,執(zhí)行順序是 nextTicksetImmediate要早,而setTimeout由設定的時間來決定,如果時間為0,則是在兩個事件隊列之間。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是NodeJS? JS是一種腳本語言,腳本語言的運行,都需要一個解析器,NodeJS則是對于獨立運行JS充當解...
    風隨風去閱讀 485評論 0 0
  • 首先 nodejs并不是一門新的語言,他的作用主要在于后臺。 接觸過前端的都知道 前端無非就是 html,css,...
    Yossef閱讀 3,264評論 2 7
  • 西山日暮,微雨如絲,獨坐燈下,奮筆書心。 雨落哀傷,絲絲零落,滴滴心傷,漣漪激蕩。 微雨窗外,憶昔過往,思君如昔,...
    星辰溥天閱讀 336評論 0 4
  • 題目: Given a string s, find the longest palindromic substr...
    maskwang520閱讀 509評論 0 0
  • 自己就像一只正在蛻皮的蟬,最大的感覺就是疼,撕心裂肺的疼痛,每一片肉都努力的從殼里掙脫出來,疼的無法忍受之時,甚...
    夢醒時分2018閱讀 399評論 0 0

友情鏈接更多精彩內(nèi)容