欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

初始Nodejs

 更新時間:2014年11月08日 14:57:41   投稿:hebedich  
本文屬于nodejs的基礎(chǔ)知識介紹篇,從nodejs的基本概念,到架構(gòu)示意圖,同步異步等方面做了詳細的解答,是篇非常不錯的文章

基本概念

Node.js,或者 Node,是一個可以讓 JavaScript 運行在服務(wù)器端的平臺??梢哉f,Node.js開創(chuàng)了javascript模塊化開發(fā)的先河,早期的javascript需求都很簡單,基本都是寫成函數(shù)的,然后是面向過程的寫法,后來慢慢的引入面向?qū)ο箝_發(fā)思想,再后來就慢慢寫成 類。最后node.js的出現(xiàn)才開始有了js模塊化開發(fā)的概念,這使得臃腫的js代碼免去了命名沖突等一系列開發(fā)難題。

Node最大的特點就是采用了異步式I/O與事件驅(qū)動的架構(gòu)設(shè)計。Node.js是一個讓js運行在瀏覽器外的平臺。其最初目標是實現(xiàn)事件驅(qū)動,非阻塞I/O的web服務(wù)器

Node.js 只是一個 JavaScript 的運行環(huán)境(或者說是一組庫), 為標準 js 補充了有關(guān)異步 IO, 即讀寫網(wǎng)絡(luò)和文件的功能。
一個庫嘛,無非是調(diào)調(diào) API 什么的,除了略反人類的事件回調(diào)之外,和其他后端語言(PHP, Python)也差不了多少。

Node.js使用的是單線程模式,每一個線程完成一個功能,一個進程可以有多個線程,對于所有的I/O都采用異步式的請求方式。每個異步式I/O請求完成后都會被推送到事件隊列,等待程序進程進行處理。

總之,node的核心思想就是:非阻塞,單線程和事件驅(qū)動。(同步對應(yīng)的是阻塞,異步對應(yīng)的是非阻塞)

Node.JS架構(gòu)示意圖

單線程

javascript語言的執(zhí)行環(huán)境是"單線程"(single thread)。
所謂"單線程",就是指一次只能完成一件任務(wù)。如果有多個任務(wù),就必須排隊,前面一個任務(wù)完成,再執(zhí)行后面一個任務(wù),以此類推。

這種模式的好處是實現(xiàn)起來比較簡單,執(zhí)行環(huán)境相對單純;壞處是只要有一個任務(wù)耗時很長,后面的任務(wù)都必須排隊等著,會拖延整個程序的執(zhí)行。常見的瀏覽器無 響應(yīng)(假死),往往就是因為某一段Javascript代碼長時間運行(比如死循環(huán)),導(dǎo)致整個頁面卡在這個地方,其他任務(wù)無法執(zhí)行。

大部分 Web 應(yīng)用的瓶頸都在 I/O, 即讀寫磁盤,讀寫網(wǎng)絡(luò),讀寫數(shù)據(jù)庫。使用怎樣的策略等待這段時間,就成了改善性能的關(guān)鍵點

同步與異步

為了解決這個問題,Javascript語言將任務(wù)的執(zhí)行模式分成兩種:同步(Synchronous)和異步(Asynchronous)。

"同步模式"就是上一段的模式,后一個任務(wù)等待前一個任務(wù)結(jié)束,然后再執(zhí)行,程序的執(zhí)行順序與任務(wù)的排列順序是一致的、同步的;"異步模式"則完全不同, 每一個任務(wù)有一個或多個回調(diào)函數(shù)(callback),前一個任務(wù)結(jié)束后,不是執(zhí)行后一個任務(wù),而是執(zhí)行回調(diào)函數(shù),后一個任務(wù)則是不等前一個任務(wù)結(jié)束就執(zhí) 行,所以程序的執(zhí)行順序與任務(wù)的排列順序是不一致的、異步的。

"異步模式"非常重要。在瀏覽器端,耗時很長的操作都應(yīng)該異步執(zhí)行,避免瀏覽器失去響應(yīng),最好的例子就是Ajax操作。在服務(wù)器端,"異步模式"甚至是唯一的模式,因為執(zhí)行環(huán)境是單線程的,如果允許同步執(zhí)行所有http請求,服務(wù)器性能會急劇下降,很快就會失去響應(yīng)。

進程與線程

mac系統(tǒng)中的進程與線程

從圖中我們可以看出,一個進程可以包括多個線程,進程就好比工程里的車間,線程就是這個車間的工人,在引入線程的操作系統(tǒng)中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調(diào)度的基本單位。由于線程比進程更小,基本上不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會小得多,能更高效的提高系統(tǒng)內(nèi)多個程序間并發(fā)執(zhí)行的程度。

區(qū)別

線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文。多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定。線程的運行中需要使用計算機的內(nèi)存資源和CPU。

模塊和包模塊

模塊:一個實現(xiàn)某些特定功能的文件,以實現(xiàn)模塊化編程。通過require(模塊名)引入模塊.
—模塊中的功能(如:變量,函數(shù))通過賦給exports對象的某個屬性提供給調(diào)用者使用。

如何使用模塊?

在Node中使用模塊是非常方便的,在 JavaScript 代碼中可以直接使用全局函數(shù) require() 來加載一個模塊。例如,我們可以使用require("http")來加載node中自帶的http服務(wù)器模塊,

包:包是一個文件夾,它將模塊封裝起來,用于發(fā)布、更新、依賴管理和版本控制。通過package.json來描述包的信息:入口文件,依賴的外部包等等。通過npm install命令來安裝包,并通過require使用包。

異步式 I/O 與事件驅(qū)動

Node.js 的異步機制是基于事件的,每一個 I/O就是一次請求,所有的磁盤 I/O、網(wǎng)絡(luò)通信、數(shù)據(jù)庫查詢都以非阻塞的方式請求,返回的結(jié)果由事件循環(huán)來處理。如下圖所示:

Node.js 進程在同一時刻只會處理一個事件,完成后立即進入事件循環(huán)檢查并處理后面的事件。這樣做的好處是,CPU 和內(nèi)存在同一時間集中處理一件事,同時盡可能讓耗時的 I/O 操作并行執(zhí)行

開始node編程

在這里,我推薦大家使用webstorm進行node.js的開發(fā),方便又快捷,比起cmd,或者Mac下的終端都好用太多了。

至于node的安裝大家就自行百度吧,這里就不贅述了,看下webstorm下的node編程界面吧:
我們只需要在編寫好的node代碼界面按鼠標右鍵,然后點擊Run就行啦,方便又快捷吧

下面是node的輸出界面:

Mac系統(tǒng)下進行web開發(fā),我推薦大家使用的三款工具是:coda2,webstorm和Sublime text3這些是目前我已經(jīng)的最好的開發(fā)工具了,大家不妨試試哪個更符合自己的口味。

webstorm進行node開發(fā)需要先配置一定的文件,大家就自行百度吧,因為我的webstorm已經(jīng)配置好了,所以沒法截圖給大家看步驟了,大概步驟是,在mac系統(tǒng)下是先點擊頂部欄的webstorm,然后點擊perference,然后點擊Node.js and NPM,然后在右側(cè)點擊configure配置,最后大概會是下面這個樣子:

windows系統(tǒng)下和這個流程步驟大概相似啊,我使用的版本是8.0.4的。

全局變量

在js編程中,我們最好給每個變量都添加上var關(guān)鍵字,以免污染全局命名空間,提高代碼的耦合風(fēng)險。

console

console用于向標準輸出流standout(stdout)和標準錯誤流(stderr)輸出字符。

console.log()向標準輸出流打印字符并以換行符結(jié)束,其接受多個參數(shù),將以類似C語言的printf()格式輸出

console.log(__dirname)輸出文件目錄

計算代碼運行時間

 console.time(label) 
console.timeEnd(label)

我們只需在開始和結(jié)束那里給同樣一個標簽即可,中間放你想要計算執(zhí)行時間的任何代碼。

__filename__dirname

 console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js
 console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon

相關(guān)文章

  • node.js請求HTTPS報錯:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解決方法

    node.js請求HTTPS報錯:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解決方法

    最近在工作中遇到一個問題,node.js請求HTTPS時報錯:Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE\,通過查找網(wǎng)上的一些資料找到了解決方法,現(xiàn)在總結(jié)下分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • Node多進程的實現(xiàn)方法

    Node多進程的實現(xiàn)方法

    我們都知道?Node.js?是以單線程的模式運行的,但它使用的是事件驅(qū)動來處理并發(fā),這樣有助于我們在多核?cpu?的系統(tǒng)上創(chuàng)建多個子進程,從而提高性能
    2022-08-08
  • 使用pm2自動化部署node項目的方法步驟

    使用pm2自動化部署node項目的方法步驟

    這篇文章主要介紹了使用pm2自動化部署node項目的方法步驟,pm2是一個進程管理工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • node實現(xiàn)簡單的反向代理服務(wù)器

    node實現(xiàn)簡單的反向代理服務(wù)器

    本篇文章主要介紹了node實現(xiàn)簡單的反向代理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 如何設(shè)置process.env.NODE_ENV生產(chǎn)環(huán)境模式

    如何設(shè)置process.env.NODE_ENV生產(chǎn)環(huán)境模式

    process.env.NODE_ENV默認只有兩種狀態(tài)即development和production,本文主要介紹了process.env.NODE_ENV設(shè)置生產(chǎn)環(huán)境模式,感興趣的可以了解一下
    2021-09-09
  • Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn)

    Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn)

    這篇文章主要介紹了Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 詳解Node.JS模塊 process

    詳解Node.JS模塊 process

    這篇文章主要介紹了Node.JS模塊 process的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下
    2020-08-08
  • 詳解KOA2如何手寫中間件(裝飾器模式)

    詳解KOA2如何手寫中間件(裝飾器模式)

    這篇文章主要介紹了詳解KOA2如何手寫中間件(裝飾器模式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Node.js發(fā)起HTTP請求的6種不同方法小結(jié)

    Node.js發(fā)起HTTP請求的6種不同方法小結(jié)

    本文主要介紹了Node.js發(fā)起HTTP請求的6種不同方法小結(jié),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Node錯誤處理筆記之挖坑系列教程

    Node錯誤處理筆記之挖坑系列教程

    因為nodejs是單線程的,所以一旦發(fā)生錯誤或異常,如果沒有及時被處理整個系統(tǒng)就會崩潰。下面這篇文章主要給大家介紹了關(guān)于Node錯誤處理筆記之挖坑系列的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-06-06

最新評論