首先JavaScript是一門編程語言,就像Java、Python、C#、GO一樣,在Node出來之前,JavaScript主要運(yùn)行于瀏覽器中,用來控制頁面的展示邏輯,以及交互操作等。JavaScript之所以能夠在瀏覽器中執(zhí)行,是因?yàn)闉g覽器中都有JavaScript的解析引擎,不同的瀏覽器的解析引擎是不同的。
當(dāng)然除了這些解析引擎外還有其他的解析引擎:比如說quickjs等。
那么JavaScript是如何和瀏覽器進(jìn)行交互的,我們都知道,瀏覽器是用C++進(jìn)行編寫的,他會(huì)去解析Html,Css等進(jìn)行渲染,因?yàn)檫@些都是規(guī)則(也就是約定,或者是接口)。對于JavaScript也一樣,瀏覽器也會(huì)提供一些接口,然后,解析器將我們的JavaScript規(guī)則轉(zhuǎn)換成調(diào)用瀏覽器接口的東西,這樣就促成了JavaScript和瀏覽器的交互。
而Node就是建立的在V8解析引擎上面,將調(diào)用系統(tǒng)的功能進(jìn)行了封裝,而中間
Node的特點(diǎn)對NodeJs其特點(diǎn)有以下幾個(gè)方面:
接下來就意義介紹其上述的幾個(gè)特點(diǎn):
Node是一個(gè)JavaScript運(yùn)行環(huán)境,依賴于Chrome V8引擎進(jìn)行代碼解釋簡單來說,CPU并不認(rèn)識我們的JavaScript代碼,而不同的CPU只認(rèn)識自己對應(yīng)的指令集,JavaScript引擎將js代碼編譯成CPU認(rèn)識的指令集,當(dāng)然除了編譯之外還要負(fù)責(zé)執(zhí)行以及內(nèi)存的管理。另外JavaScript是解釋形語言,由引擎直接讀取源碼,一邊編譯一邊執(zhí)行,這樣效率相對較低,而編譯形語言(如c++)是把源碼直接編譯成可直接執(zhí)行的代碼執(zhí)行效率更高。而V8引擎則是一種高效的JavaScript的引擎
V8引擎是一個(gè)JavaScript引擎實(shí)現(xiàn),最初由一些語言方面專家設(shè)計(jì),后被谷歌收購,隨后谷歌對其進(jìn)行了開源。V8使用C++開發(fā),,在運(yùn)行JavaScript之前,相比其它的JavaScript的引擎轉(zhuǎn)換成字節(jié)碼或解釋執(zhí)行,V8將其編譯成原生機(jī)器碼(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如內(nèi)聯(lián)緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序在V8引擎下的運(yùn)行速度媲美二進(jìn)制程序。V8支持眾多操作系統(tǒng),如windows、linux、android等,也支持其他硬件架構(gòu),如IA32,X64,ARM等,具有很好的可移植和跨平臺特性。
單進(jìn)程,單線程(這里指主線程)對于NodeJS來說,其中的JavaScript的執(zhí)行是單線程的(這里的單線程是指主線程是單線程)。所有的任務(wù)都放在同一個(gè)任務(wù)執(zhí)行隊(duì)列里面去(當(dāng)然任務(wù)會(huì)被分為基本任務(wù),宏任務(wù)和微任務(wù)。只是不同的任務(wù)類型在任務(wù)隊(duì)列里里面執(zhí)行的方式不一樣而已)。
非阻塞I/O一個(gè)完整的IO請求的主要包括有兩個(gè)階段:
1、查看數(shù)據(jù)是否就緒;
2、進(jìn)行數(shù)據(jù)拷貝(內(nèi)核將數(shù)據(jù)拷貝到用戶線程)。
阻塞(blocking IO)和非阻塞(non-blocking IO)的區(qū)別就在于第一個(gè)階段,如果數(shù)據(jù)沒有就緒,再查看數(shù)據(jù)是否就緒的過程中是一直等待,還是直接返回一個(gè)標(biāo)志信息。
非阻塞,就是進(jìn)程或線程執(zhí)行此函數(shù)時(shí)不必非要等待事件的發(fā)生,一旦執(zhí)行肯定返回,以返回值的不同來反映函數(shù)的執(zhí)行情況,如果事件發(fā)生則與阻塞方式相同,若事件沒有發(fā)生則返回一個(gè)代碼來告知事件未發(fā)生,而進(jìn)程或線程繼續(xù)執(zhí)行,所以效率較高。
異步事件驅(qū)動(dòng)這中間其實(shí)有三個(gè)概念,異步、事件和事件驅(qū)動(dòng)。我們挨個(gè)介紹。
在Node底層采用了Libuv這個(gè)庫,Libuv是一個(gè)跨平臺的的基于事件驅(qū)動(dòng)的異步io庫。但是他提供的功能不僅僅是io,包括進(jìn)程、線程、信號、定時(shí)器、進(jìn)程間通信等。
性能出眾底層選擇用c++和v8來實(shí)現(xiàn)的,上面第一點(diǎn)講到過,nodejs的事件驅(qū)動(dòng)機(jī)制,這意味著面對大規(guī)模的http請求,nodejs是憑借事件驅(qū)動(dòng)來完成的,性能部分是不用擔(dān)心的,并且很出色。
Node的優(yōu)勢1、Nodejs語法完全是js語法,只要你懂js基礎(chǔ)就可以學(xué)會(huì)Nodejs后端開發(fā)
Node打破了過去JavaScript只能在瀏覽器中運(yùn)行的局面。前后端編程環(huán)境統(tǒng)一,可以大大降低開發(fā)成本。
NodeJs超強(qiáng)的高并發(fā)能力
NodeJs的首要目標(biāo)是提供一種簡單的、用于創(chuàng)建高性能服務(wù)器及可在該服務(wù)器中運(yùn)行的各種應(yīng)用程序的開發(fā)工具。
首先讓我們來看一下現(xiàn)在的服務(wù)器端語言中存在著什么問題。在Java、PHP或者.NET等服務(wù)器語言中,會(huì)為每一個(gè)客戶端連接創(chuàng)建一個(gè)新的線程。而每個(gè)線程需要耗費(fèi)大約2MB內(nèi)存。也就是說,理論上,一個(gè)8GB內(nèi)存的服務(wù)器可以同時(shí)連接的大用戶數(shù)為4000個(gè)左右。要讓web應(yīng)用程序支持更多的用戶,就需要增加服務(wù)器的數(shù)量,而web應(yīng)用程序的硬件成本當(dāng)然就上升了。
NodeJs不為每個(gè)客戶連接創(chuàng)建一個(gè)新的線程,而僅僅使用一個(gè)線程。當(dāng)有用戶連接了,就觸發(fā)一個(gè)內(nèi)部事件,通過非阻塞I/O、事件驅(qū)動(dòng)機(jī)制,讓Node.js程序宏觀上也是并行的。使用Node.js,一個(gè)8GB內(nèi)存的服務(wù)器,可以同時(shí)處理超過4萬用戶的連接。
實(shí)現(xiàn)高性能服務(wù)器
嚴(yán)格地說,Node.js是一個(gè)用于開發(fā)各種web服務(wù)器的開發(fā)工具。在Node.js服務(wù)器中,運(yùn)行的是高性能V8 JavaScript腳本語言,該語言是一種可以運(yùn)行在服務(wù)器端的腳本語言。
那么,什么是V8 JavaScript腳本語言呢?該語言是一種被V8 JavaScript引擎所解析并執(zhí)行的腳本語言。V8 JavaScript引擎是由Google公司使用C++語言開發(fā)的一種高性能JavaScript引擎,該引擎并不局限于在瀏覽器中運(yùn)行。Node.js將其轉(zhuǎn)用在了服務(wù)器中,并且為其提供了許多附加的具有各種不同用途的API。例如,在一個(gè)服務(wù)器中,經(jīng)常需要處理各種二進(jìn)制數(shù)據(jù)。在JavaScript腳本語言中,只具有非常有限的對二進(jìn)制數(shù)據(jù)的處理能力,而Node.js所提供的Buffer類則提供了豐富的對二進(jìn)制數(shù)據(jù)的處理能力。
另外,在V8 JavaScript引擎內(nèi)部使用一種全新的編譯技術(shù)。這意味著開發(fā)者編寫的高端的 JavaScript 腳本代碼與開發(fā)者編寫的低端的C語言具有非常相近的執(zhí)行效率,這也是Node.js服務(wù)器可以提供的一個(gè)重要特性。
開發(fā)周期短、開發(fā)成本低、學(xué)習(xí)成本低
Node.js自身哲學(xué),是話最小的硬件成本,追求更高的并發(fā),更高的處理性能。
解決方案:分解大型運(yùn)算任務(wù)為多個(gè)小任務(wù),使得運(yùn)算能夠適時(shí)釋放,不阻塞I/O調(diào)用的發(fā)起;
只支持單核CPU,不能充分利用CPU
可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰
原因:單進(jìn)程,單線程
解決方案:(1)Nnigx反向代理,負(fù)載均衡,開多個(gè)進(jìn)程,綁定多個(gè)端口;
(2)開多個(gè)進(jìn)程監(jiān)聽同一個(gè)端口,使用cluster模塊;
開源組件庫質(zhì)量參差不齊,更新快,向下不兼容
Debug不方便,錯(cuò)誤沒有stack trace
前端工具的腳手架、輔助工具類
發(fā)展到api中間層、代理層
以及專業(yè)的后端開發(fā)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前題目:Node基礎(chǔ)——認(rèn)識Node-創(chuàng)新互聯(lián)
標(biāo)題URL:http://www.chinadenli.net/article44/dcgoee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、域名注冊、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站排名、標(biāo)簽優(yōu)化、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容