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

Node.js的特點和應用場景介紹

 更新時間:2014年11月04日 11:44:59   投稿:junjie  
這篇文章主要介紹了Node.js的特點和應用場景介紹,本文講解了Node.js的異步I/O、 事件循環(huán)與回調(diào)函數(shù)、單線程、 跨平臺等特性,然后總結(jié)了它的使用場景,需要的朋友可以參考下

Node.js應該是當今最火熱的技術之一。本文主要介紹Node.js的特點及應用場景。

Node.js是一個基于Chrome JavaScript運行時建立的一個平臺,用來方便地搭建快速的 易于擴展的網(wǎng)絡應用。Node.js借助事件驅(qū)動,非阻塞I/O模型變得輕量和高效,非常適合 運行在分布式設備的數(shù)據(jù)密集型實時應用。

1. 特點

1.1 異步I/O

所謂的異步I/O,是相對同步I/O而言的。程序執(zhí)行過程中必然要進行很多I/O操作,如讀寫文件、輸入輸出、請求響應等等。通常來說,I/O操作是非常費時的。例如在傳統(tǒng)的編程模式中,你要讀一個幾G的文件,整個線程都暫停下來,等待文件讀完后繼續(xù)執(zhí)行。換言之,I/O操作阻塞了代碼的執(zhí)行,極大地降低了程序的效率。

關于異步I/O,其實對于前端工程師來說并不陌生,因為發(fā)起Ajax請求就是最常見的一種“異步”調(diào)用。在Node中,以讀取文件(讀文件是一種耗時的I/O操作)為例,它與發(fā)起Ajax請求的寫法很像:

復制代碼 代碼如下:

var fs = require('fs');
fs.readFile('/path', function(err, file) {
    console.log('讀取文件完成');
});
console.log('開始讀取文件');

上述代碼在調(diào)用fs.readFile后,后續(xù)代碼是被立即執(zhí)行的,“讀取文件完成”的時刻是無法預知的。當線程遇到I/O操作時不會以阻塞的方式等待I/O操作結(jié)束,而只是將I/O請求發(fā)送給操作系統(tǒng),繼續(xù)執(zhí)行后續(xù)語句。當操作系統(tǒng)完成I/O操作時以事件的形式通知執(zhí)行I/O操作的線程,線程會在特定時間處理這個事件。

1.2 事件循環(huán)與回調(diào)函數(shù)

所謂事件循環(huán)是指Node會把所有的異步操作使用事件機制解決,有個線程在不斷地循環(huán)檢測事件隊列。事件循環(huán)會檢查事件隊列中有沒有未處理的事件,直到程序結(jié)束。事件的編程方式具有輕量級、松耦合、只關注事務點等優(yōu)勢,但是在多個異步任務的場景下,事件與事件之間各自獨立,如何協(xié)作是一個問題。在Javascript中,回調(diào)函數(shù)無處不在,回調(diào)函數(shù)是最好的接受異步調(diào)用返回數(shù)據(jù)的方式。

1.3 單線程

Node保持了JS在瀏覽器中單線程的特點。單線程的最大好處是不用像多線程編程那樣出處在意狀態(tài)的同步問題,沒有死鎖的存在,也沒有線程上下文切換的開銷。單線程也有其弱點,主要表現(xiàn)在三方面:無法利用多核CPU;錯誤會引起整個應用退出,應用的健壯性值得考研;大量計算會占用CPU導致無法繼續(xù)調(diào)用異步I/O。

為了解決上述問題,Node采用了與HTML5 Web Workers相同的思路,使用child_process來解決但單線程中大計算量的問題。通過將計算分發(fā)到各個子進程,可以將大量計算分解掉,然后再通過進程之間的事件消息來傳遞結(jié)果。

1.4 跨平臺

Node是跨平臺的,即同樣的一套JS代碼都可以部署運行在Windows、Linux、OSX等平臺。這主要得益于Node在操作系統(tǒng)與Node上層模塊系統(tǒng)之間構(gòu)建了一層平臺層架構(gòu)libuv。

2. 應用場景

1)、實時應用:如在線聊天,實時通知推送等等(如socket.io
2)、分布式應用:通過高效的并行I/O使用已有的數(shù)據(jù)
3)、工具類應用:海量的工具,小到前端壓縮部署(如grunt),大到桌面圖形界面應用程序
4)、游戲類應用:游戲領域?qū)崟r和并發(fā)有很高的要求(如網(wǎng)易的pomelo框架)
5)、利用穩(wěn)定接口提升Web渲染能力
6)、前后端編程語言環(huán)境統(tǒng)一:前端開發(fā)人員可以非??焖俚厍腥氲椒掌鞫说拈_發(fā)(如著名的純Javascript全棧式MEAN架構(gòu))

相關文章

  • Nodejs中的this詳解

    Nodejs中的this詳解

    本文給大家匯總介紹了下nodejs中的this,nodejs中的this和在瀏覽器中javascript中的this還是有很大的差異的,小伙伴們可以研究下
    2016-03-03
  • node.js實現(xiàn)websocket的即時通訊詳解

    node.js實現(xiàn)websocket的即時通訊詳解

    這篇文章主要介紹了深入淺出講解websocket的即時通訊,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發(fā)送信息,是真正的雙向平等對話,屬于服務器推送技術的一種,需要的朋友可以參考下
    2023-05-05
  • Node.js調(diào)用java之node-java問題

    Node.js調(diào)用java之node-java問題

    這篇文章主要介紹了Node.js調(diào)用java之node-java問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • nodeJS刪除文件方法示例

    nodeJS刪除文件方法示例

    這篇文章主要介紹了nodeJS刪除文件方法,結(jié)合實例形式分析了nodeJS實現(xiàn)文件與目錄的獲取、遍歷與刪除相關操作技巧,需要的朋友可以參考下
    2016-12-12
  • node.js安裝及環(huán)境配置超詳細步驟講解(Windows系統(tǒng)安裝包方式)

    node.js安裝及環(huán)境配置超詳細步驟講解(Windows系統(tǒng)安裝包方式)

    這篇文章主要介紹了node.js安裝及環(huán)境配置超詳細教程(Windows系統(tǒng)安裝包方式),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Nodejs實現(xiàn)WebSocket代碼實例

    Nodejs實現(xiàn)WebSocket代碼實例

    這篇文章主要介紹了Nodejs實現(xiàn)WebSocket代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • nvm使用use命令失效問題解決方法

    nvm使用use命令失效問題解決方法

    這篇文章主要給大家介紹了關于nvm使用use命令失效問題的解決方法,nvm是一個類似于版本管理工具的軟件,它可以輕松地在同一臺計算機上管理多個不同的node.js版本,需要的朋友可以參考下
    2023-07-07
  • Node中的Events模塊介紹及應用

    Node中的Events模塊介紹及應用

    events模塊是node內(nèi)置的核心模塊 這個模塊是node中一個非常重要的核心模塊,node中所有能觸發(fā)事件的對象都是這個類的實例
    2022-08-08
  • npm安裝windows-build-tools卡在Successfully?installed?Python2.7

    npm安裝windows-build-tools卡在Successfully?installed?Python2.7

    這篇文章主要介紹了npm安裝windows-build-tools卡在Successfully?installed?Python2.7的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Nodejs調(diào)用Dll模塊的方法

    Nodejs調(diào)用Dll模塊的方法

    這篇文章主要介紹了Nodejs調(diào)用Dll模塊的方法,在文中給大家提到了nodejs通過ffi調(diào)用dll模塊的代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09

最新評論