最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js的特點(diǎn)和應(yīng)用場景介紹

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

Node.js應(yīng)該是當(dāng)今最火熱的技術(shù)之一。本文主要介紹Node.js的特點(diǎn)及應(yīng)用場景。

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

1. 特點(diǎn)

1.1 異步I/O

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

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

復(fù)制代碼 代碼如下:

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

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

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

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

1.3 單線程

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

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

1.4 跨平臺

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

2. 應(yīng)用場景

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

相關(guān)文章

  • Node.js 使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件

    Node.js 使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件

    這篇文章主要介紹了Node.js使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件,需要的朋友可以參考下
    2017-09-09
  • 在Node.js中使用Express框架和Mongoose庫實(shí)現(xiàn)視頻評論功能

    在Node.js中使用Express框架和Mongoose庫實(shí)現(xiàn)視頻評論功能

    本文我們將詳細(xì)介紹如何在Node.js應(yīng)用中使用Express框架和Mongoose庫來實(shí)現(xiàn)一個(gè)視頻評論功能,這個(gè)功能允許用戶對視頻內(nèi)容添加評論,并將評論數(shù)實(shí)時(shí)更新,以下是逐步的實(shí)現(xiàn)過程,包括代碼示例和說明,需要的朋友可以參考下
    2024-04-04
  • node 可讀流與可寫流的運(yùn)用詳解

    node 可讀流與可寫流的運(yùn)用詳解

    這篇文章主要為大家介紹了node 可讀流與可寫流的運(yùn)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    這篇文章主要介紹了NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • node.js中的fs.fstat方法使用說明

    node.js中的fs.fstat方法使用說明

    這篇文章主要介紹了node.js中的fs.fstat方法使用說明,本文介紹了fs.fstat的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 淺談node使用jwt生成的token應(yīng)該存在哪里

    淺談node使用jwt生成的token應(yīng)該存在哪里

    早上逛某乎的時(shí)候,遇到一位同學(xué)在問這個(gè)問題,很好奇jwt的存儲位置。本文詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • Node.js中操作MongoDB的CRUD操作指南

    Node.js中操作MongoDB的CRUD操作指南

    在Node.js中操作MongoDB常見的庫有mongodb原生驅(qū)動和mongoose等,本文將使用mongodb官方驅(qū)動包來進(jìn)行示例,在開始之前,請確保已經(jīng)安裝了MongoDB數(shù)據(jù)庫并且在本地啟動了MongoDB服務(wù),需要的朋友可以參考下
    2024-01-01
  • 淺談Node新版本13.2.0正式支持ES Modules特性

    淺談Node新版本13.2.0正式支持ES Modules特性

    這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Node.js操作MySQL8.0數(shù)據(jù)庫無法連接的問題解決

    Node.js操作MySQL8.0數(shù)據(jù)庫無法連接的問題解決

    使用node.js連接數(shù)據(jù)庫MySQL 8時(shí)候,顯示報(bào)錯(cuò) ER_NOT_SUPPORTED_AUTH_MODE,本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-10-10
  • 基于Express和Multer實(shí)現(xiàn)文件本地服務(wù)器文件上傳功能

    基于Express和Multer實(shí)現(xiàn)文件本地服務(wù)器文件上傳功能

    在現(xiàn)代應(yīng)用程序中,文件上傳功能成為了用戶共享和存儲數(shù)據(jù)的重要途徑,所以本文我們一起來探討文件上傳中間件的重要性,并提供常見的實(shí)現(xiàn)方法和相應(yīng)的代碼吧
    2023-06-06

最新評論

博白县| 涿鹿县| 图木舒克市| 临桂县| 吉首市| 德清县| 古浪县| 化州市| 民乐县| 西青区| 平原县| 司法| 长宁区| 新宁县| 静宁县| 西城区| 哈尔滨市| 淮南市| 电白县| 弥渡县| 中超| 濮阳县| 清水河县| 铁力市| 宿迁市| 上蔡县| 独山县| 搜索| 通渭县| 东乌珠穆沁旗| 桦甸市| 曲阳县| 榆中县| 灵武市| 化州市| 阳新县| 长海县| 洛川县| 大姚县| 政和县| 怀远县|