Node.js—简介
一、Node.js是什么
1. 基本概述
Node.js是一個(gè)可以讓JavaScript運(yùn)行在服務(wù)器端的平臺(tái)。它是一個(gè)為實(shí)時(shí)Web應(yīng)用開(kāi)發(fā)而誕生的平臺(tái),它從誕生之初就充分考慮了在實(shí)時(shí)響應(yīng)、超大規(guī)模數(shù)據(jù)要求下架構(gòu)的可擴(kuò)展性。這使得它摒棄了傳統(tǒng)平臺(tái)依靠多線程來(lái)實(shí)現(xiàn)高并發(fā)的設(shè)計(jì)思路,而采用了單線程、異步I/O、事件驅(qū)動(dòng)式的程序設(shè)計(jì)模式。
Node.js 有著強(qiáng)大而靈活的包管理器(node package manager, npm),目前已經(jīng)有上萬(wàn)個(gè)第三方模塊,其中有網(wǎng)站開(kāi)發(fā)框架,有 MySQL、PostgreSQL、MongoDB數(shù)據(jù)庫(kù)接口,有模板語(yǔ)言解析、 CSS 生成工具、郵件、加密、圖形、調(diào)試支持,甚至還有圖形用戶界面和操作系統(tǒng) API工具。
Node.js 可以作為服務(wù)器向用戶提供服務(wù),與 PHP、 Python、 Ruby on Rails 相比,它跳過(guò)了 Apache、 Nginx 等 HTTP服務(wù)器,直接面向前端開(kāi)發(fā)。 Node.js 的許多設(shè)計(jì)理念與經(jīng)典架構(gòu)(如 LAMP)有著很大的不同,可提供強(qiáng)大的伸縮能力 。
2. 相關(guān)名詞介紹
(1) JavaScript
JavaScript是由ECMAScript、文檔對(duì)象模型(DOM)和瀏覽器對(duì)象模型(BOM)組成的,而Mozilla則指出JavaScript由Core JavaScript和Client JavaScript組成的。Node.js中的JavaScript只是Core JavaScript,或者說(shuō)是ECMAScript的一個(gè)實(shí)現(xiàn),不包含DOM、BOM或者Client JavaScript,這是因?yàn)镹ode.js不運(yùn)行在瀏覽器中,所以不需要使用瀏覽器中的許多特性。
(2) V8引擎
Node.js 的 JavaScript 引擎是 V8,來(lái)自 Google Chrome 項(xiàng)目。 V8 號(hào)稱是目前世界上最快的 JavaScript 引擎,經(jīng)歷了數(shù)次引擎革命,它的 JIT(Just-in-time Compilation,即時(shí)編譯)執(zhí)行速度已經(jīng)快到了接近本地代碼的執(zhí)行速度。 Node.js 不運(yùn)行在瀏覽器中,所以也就不存在 JavaScript 的瀏覽器兼容性問(wèn)題,你可以放心地使用 JavaScript 語(yǔ)言的所有特性。
二、Node.js能做什么
- 具有復(fù)雜邏輯的網(wǎng)站;
- 基于社交網(wǎng)絡(luò)的大規(guī)模 Web 應(yīng)用;
- Web Socket 服務(wù)器;
- TCP/UDP 套接字應(yīng)用程序;
- 命令行工具;
- 交互式終端程序;
- 帶有圖形用戶界面的本地應(yīng)用程序;
- 單元測(cè)試工具;
- 客戶端 JavaScript 編譯器;
- Node.js 內(nèi)建了 HTTP 服務(wù)器支持,也就是說(shuō)你可以輕而易舉地實(shí)現(xiàn)一個(gè)網(wǎng)站和服務(wù)器的組合。
三、Node.js異步I/O與事件驅(qū)動(dòng)
Node.js 最大的特點(diǎn)就是采用異步式 I/O 與事件驅(qū)動(dòng)的架構(gòu)設(shè)計(jì)。 傳統(tǒng)高并發(fā)架構(gòu)方案是多線程模式,Node.js 使用的是單線程模型,對(duì)于所有 I/O 都采用異步式的請(qǐng)求方式,避免了頻繁的上下文切換。 Node.js 在執(zhí)行的過(guò)程中會(huì)維護(hù)一個(gè)事件隊(duì)列,程序在執(zhí)行時(shí)進(jìn)入事件循環(huán)等待下一個(gè)事件到來(lái),每個(gè)異步式 I/O 請(qǐng)求完成后會(huì)被推送到事件隊(duì)列,等待程序進(jìn)程進(jìn)行處理。
Node.js 的異步機(jī)制是基于事件的,所有的磁盤 I/O、網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)查詢都以非阻塞的方式請(qǐng)求,返回的結(jié)果由事件循環(huán)來(lái)處理。
Node.js 進(jìn)程在同一時(shí)刻只會(huì)處理一個(gè)事件,完成后立即進(jìn)入事件循環(huán)檢查并處理后面的事件。這樣做的好處是,CPU 和內(nèi)存在同一時(shí)間集中處理一件事,同時(shí)盡可能讓耗時(shí)的 I/O 操作并行執(zhí)行。對(duì)于低速連接攻擊, Node.js 只是在事件隊(duì)列中增加請(qǐng)求,等待操作系統(tǒng)的回應(yīng),因而不會(huì)有任何多線程開(kāi)銷,很大程度上可以提高 Web 應(yīng)用的健壯性,防止惡意攻擊。
四、Node.js性能
Node.js 用異步式 I/O 和事件驅(qū)動(dòng)代替多線程,帶來(lái)了可觀的性能提升。 Node.js 除了使用 V8 作為JavaScript引擎以外,還使用了高效的 libev 和 libeio 庫(kù)支持事件驅(qū)動(dòng)和異步式 I/O。
Node.js 的開(kāi)發(fā)者在 libev 和 libeio 的基礎(chǔ)上還抽象出了層 libuv。對(duì)于 POSIX①操作系統(tǒng),libuv 通過(guò)封裝 libev 和 libeio 來(lái)利用 epoll 或 kqueue。
五、CommonJS規(guī)范
CommonJS 誕生了。 CommonJS 試圖定義一套普通應(yīng)用程序使用的API,從而填補(bǔ) JavaScript 標(biāo)準(zhǔn)庫(kù)過(guò)于簡(jiǎn)單的不足。
CommonJS 規(guī)范包括了模塊(modules)、包(packages)、系統(tǒng)(system)、二進(jìn)制(binary)、控制臺(tái)(console)、編碼(encodings)、文件系統(tǒng)(filesystems)、套接字(sockets)、單元測(cè)試(unit testing)等部分。
轉(zhuǎn)載于:https://www.cnblogs.com/hq82/p/10831569.html
總結(jié)
以上是生活随笔為你收集整理的Node.js—简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爬虫综合大作业(震惊!爬取了590位微信
- 下一篇: SQL工具-技术支持工具