欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Node基礎(chǔ)——認(rèn)識Node-創(chuàng)新互聯(lián)

什么是Node

首先JavaScript是一門編程語言,就像Java、Python、C#、GO一樣,在Node出來之前,JavaScript主要運(yùn)行于瀏覽器中,用來控制頁面的展示邏輯,以及交互操作等。JavaScript之所以能夠在瀏覽器中執(zhí)行,是因?yàn)闉g覽器中都有JavaScript的解析引擎,不同的瀏覽器的解析引擎是不同的。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括聊城網(wǎng)站建設(shè)、聊城網(wǎng)站制作、聊城網(wǎng)頁制作以及聊城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,聊城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到聊城省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

當(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è)方面:

  1. Node是一個(gè)Javascript運(yùn)行環(huán)境,依賴于Chrome V8引擎進(jìn)行代碼解釋
  2. 單進(jìn)程,單線程(這里指主線程)
  3. 非阻塞I/O
  4. 異步事件驅(qū)動(dòng)
  5. 性能出眾

接下來就意義介紹其上述的幾個(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
  • I/O(輸入/輸出):是在主存和外部設(shè)備(例如磁盤,終端和網(wǎng)絡(luò)。這里的外部設(shè)備又被稱之為I/O設(shè)備)之間復(fù)制數(shù)據(jù)的過程。輸入操作是從外部設(shè)備復(fù)制數(shù)據(jù)到主存,輸出操作則是從主存復(fù)制 數(shù)據(jù)到外部設(shè)備。
  • 阻塞:線程發(fā)起一個(gè)調(diào)用時(shí), 在調(diào)用返回之前, 線程會(huì)被阻塞, 在這個(gè)狀態(tài)下會(huì)交出當(dāng)前CPU的使用權(quán)而暫停.也就是調(diào)用方會(huì)等待調(diào)用結(jié)果, 調(diào)用阻塞了調(diào)用方的線程, 線程不在運(yùn)行處理中。
  • 非阻塞:線程發(fā)起一個(gè)調(diào)用時(shí), 調(diào)用會(huì)立即返回, 避免線程被阻塞。但是, 返回的結(jié)果只是被調(diào)用方當(dāng)前狀態(tài)的值, 實(shí)際使用時(shí), 調(diào)用方需要輪詢, 直到返回結(jié)果符合預(yù)期(直到數(shù)據(jù)準(zhǔn)備好)。

一個(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è)介紹。

  • 事件:就是兩個(gè)物體之間產(chǎn)生了交互行為,就可以成為一個(gè)事件。比如說我們點(diǎn)擊一個(gè)按鈕,就稱為次事件。
  • 事件驅(qū)動(dòng):就是兩個(gè)之間產(chǎn)生了交互行為,驅(qū)使兩個(gè)物體的一方,做出了相應(yīng)的行為或動(dòng)作。比如說我們單擊一個(gè)按鈕,彈出了一個(gè)彈框,那么這個(gè)彈框的這個(gè)行為,就是我們點(diǎn)擊的驅(qū)動(dòng)。
  • 異步:異步和同步是相對的,同步就是一件事一件事的執(zhí)行。只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù)。而異步,是一個(gè)任務(wù)一個(gè)人的調(diào)用,而不用等待上一個(gè)任務(wù)執(zhí)行完畢,直接開始第二次任務(wù),當(dāng)上一個(gè)任務(wù)執(zhí)行完成后,會(huì)通知做后續(xù)的操作。我們打個(gè)比方,就是我們點(diǎn)擊一個(gè)按鈕,去請求數(shù)據(jù),同時(shí)改變一下按鈕的狀態(tài),如果我們等待請求結(jié)束后,再去修改按鈕狀態(tài),這樣給人的感受就會(huì)特別的奇怪。

在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ā),更高的處理性能。

Node有哪些缺點(diǎn)
  1. 不適合CPU密集型應(yīng)用;CPU密集型應(yīng)用給Node帶來的挑戰(zhàn)主要是:由于JavaScript單線程的原因,如果有長時(shí)間運(yùn)行的計(jì)算(比如大循環(huán)),將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)I/O無法發(fā)起;

解決方案:分解大型運(yùn)算任務(wù)為多個(gè)小任務(wù),使得運(yùn)算能夠適時(shí)釋放,不阻塞I/O調(diào)用的發(fā)起;

  1. 只支持單核CPU,不能充分利用CPU

  2. 可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰

原因:單進(jìn)程,單線程

解決方案:(1)Nnigx反向代理,負(fù)載均衡,開多個(gè)進(jìn)程,綁定多個(gè)端口;

(2)開多個(gè)進(jìn)程監(jiān)聽同一個(gè)端口,使用cluster模塊;

  1. 開源組件庫質(zhì)量參差不齊,更新快,向下不兼容

  2. Debug不方便,錯(cuò)誤沒有stack trace

Node適合用來干什么

前端工具的腳手架、輔助工具類

發(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)

綿陽服務(wù)器托管