2009 年 8 月,CommonJS規(guī)范標(biāo)準(zhǔn)出臺,針對JavaScript腳本語言作為服務(wù)器端開發(fā)語言實現(xiàn)標(biāo)準(zhǔn)化令宿,制定JavaScript腳本語言作為服務(wù)器端語言所必需的規(guī)則。Ryan Dahl推出了NodoJS腕窥,是第一個服務(wù)器端JavaScript腳本語言開發(fā)框架,并且嚴(yán)格遵循CommonJS規(guī)范標(biāo)準(zhǔn)筛婉。NodeJS語言可以運行在服務(wù)器端簇爆,依據(jù)的是Google開發(fā)的V8 高性能JavaScript腳本語言。由于V8 引擎自身優(yōu)越的解析能力爽撒,以致NodeJS服務(wù)技術(shù)發(fā)展迅速入蛆,性能優(yōu)越,同時還提供了豐富的第三方庫硕勿。
此外哨毁,通過單線程實現(xiàn)異步處理是NodeJS最重要的特征之一。通常源武,對于異步操作處理扼褪,開發(fā)工程師想到的是采用多線程服務(wù)在服務(wù)器端編譯,然而NodeJS粱栖,本就由事件和異步組成话浇,其異步機制是由事件和回調(diào)函數(shù)實現(xiàn)。這里說的異步闹究,確切的說連續(xù)異步幔崖。
NodeJs單線程異步的特性,直接導(dǎo)致多個異步同時進行時,無法確定最后的執(zhí)行結(jié)果來回調(diào)赏寇。回調(diào)是一個函數(shù)自娩,每個異步操作時將計數(shù)器+1椒功,當(dāng)每個異步結(jié)束時將計數(shù)器-1,通過判斷計數(shù)器是否為 0來確定是否執(zhí)行回調(diào)。這個邏輯很簡單删豺,需要一個相對于執(zhí)行時和回調(diào)時的全局變量作為計數(shù)器,而且要在傳給異步方法是執(zhí)行+1 的操作蓬蝶,而且之后將返回一個用來回調(diào)的函數(shù),這也是JavaScript語言的高級使用方法[5]丸氛。 服務(wù)器高并發(fā)的概念,對于Web應(yīng)用開發(fā)者并不陌生禾锤,這也是長久以來困擾開發(fā)者的難題。在一定時間內(nèi)存在至少兩個以上的客戶端請求或者用戶請求螃成,對后端服務(wù)器有著持續(xù)性的高占有率宁炫,當(dāng)這些占有率達到一定的界點時,也就是達到一定的臨界點,系統(tǒng)的整體應(yīng)用性能會出現(xiàn)兩種情況幽钢,一種是維持原狀,一種是性能直線下降帽驯。那么要在現(xiàn)有存在的資源下,降低請求量享甸,盡最大可能提高資源的利用率日丹,提高應(yīng)用系統(tǒng)性能,如何實現(xiàn)系統(tǒng)的高并發(fā)要求晒旅,這也是促使NodeJS問世的最主要原因[6]谈秫。 通常為了解決上述問題迄本,開發(fā)者會首先考慮從硬件角度出發(fā)置媳,選擇優(yōu)良的應(yīng)用服務(wù)器赃份,著重從大內(nèi)存纠永、大硬盤谒拴、多CPU角度出發(fā)尝江。或者考慮對應(yīng)用整體架構(gòu)做出調(diào)整英上,增加應(yīng)用整體架構(gòu)自身的抗壓能力炭序,多一些應(yīng)用資源進行適當(dāng)減少。然而苍日,僅僅從硬件方面考慮提高系統(tǒng)應(yīng)用性能或者減少資源利用是一般的解決方案惭聂。但是從應(yīng)用整體架構(gòu)出發(fā),開發(fā)高性能的應(yīng)用架構(gòu)才是解決問題的根本方法[7]相恃。 作為一門后端編程語言辜纲,NodeJS自然提供出了很多的網(wǎng)絡(luò)服務(wù),包含HTTP拦耐、DNS耕腾、NET、UDP等等杀糯,研發(fā)工程師在此根本上就可以很快的研發(fā)出適用于自己的Web后端服務(wù)器[ 8]扫俺。 NodeJS的網(wǎng)絡(luò)編程比較便利,擁有的服務(wù)預(yù)留了簡單易讀寫的API入口文件固翰,只需幾行js語言就能構(gòu)建服務(wù)器狼纬。 對于應(yīng)用程序需要處理多并發(fā)的請求與響應(yīng)羹呵,同時在向瀏覽器端做出應(yīng)答之前,應(yīng)用程序內(nèi)部沒有必要進行十分復(fù)雜操作時畸颅,那么此時選取 NodeJS 作為該應(yīng)用程序后端服務(wù)器的開發(fā)是十分恰當(dāng)?shù)牡9A硗猓琋odeJS 是基于 JavaScript 腳本語言的網(wǎng)絡(luò)開發(fā)應(yīng)用平臺没炒,處理機制并不是多線程涛癌,因為 JavaScript 腳本語言是基于單線程實現(xiàn)的。換句話說送火,Web 應(yīng)用開發(fā)者使用 NodeJS 作為后端服務(wù)部署拳话,不用擔(dān)心因多線程帶來的切換不同層之間的聯(lián)系以及高并發(fā)帶來的影響,反而使得后端機制變得簡便种吸,開發(fā)者處理后端服務(wù)也變得更為容易弃衍。 本文以 JavaScript 語言作為核心開發(fā)語言,利用 NodeJS 網(wǎng)絡(luò)應(yīng)用平臺做后端服務(wù)平臺坚俗,統(tǒng)一前后端開發(fā)語言镜盯,同其他前沿開發(fā)技術(shù)一起,構(gòu)建一個自適應(yīng)瀏覽器猖败、高性能速缆、實用且具有現(xiàn)實意義的面向 Web 應(yīng)用開發(fā)者的 Web 應(yīng)用平臺。