js怎样和硬件交互_Node.js与JavaScript
有很多介紹nodejs的文章,也有很多教程,覆蓋了服務(wù)器開發(fā)、桌面開發(fā)、移動(dòng)端等等,但是鮮有文章明確的回答過一個(gè)問題:Node是什么?
這看起來是一個(gè)再簡(jiǎn)單過的問題了,真要答起來可不容易,不去深入研究的話可能會(huì)認(rèn)為Node就是javascript,javascript就是Node,筆者最初也是這么認(rèn)為的,但這種想法并不正確。
要尋求正確的答案首先要弄明白Node與JavaScript的關(guān)系,在Node官網(wǎng)是這樣描述的:
Node.js? is a JavaScript runtime built on Chrome's V8 JavaScript engine.
大概的意思就是Node是一個(gè)支持javascript的運(yùn)行時(shí)(runtime),是用來完成運(yùn)行腳本所需要的系統(tǒng)底層支持。嚴(yán)格的說來,Node支持的只是ECMAScript語法,它屬于javascript的一部分。
① ECMAScript:描述了該語言的語法和基本對(duì)象。
② DOM:文檔對(duì)象模型,處理網(wǎng)頁內(nèi)容的方法和接口。
③ BOM:瀏覽器對(duì)象模型,與瀏覽器進(jìn)行交互的方法和接口。
對(duì)于編程語言而言,語法的作用是面向開發(fā)者所體現(xiàn)的,最終交付于硬件執(zhí)行的效果卻是體現(xiàn)在解釋/編譯器上的。Node采用C++實(shí)現(xiàn)與系統(tǒng)底層的互動(dòng),遵循的語法是ECMAScript,當(dāng)然如果把內(nèi)核的V8引擎更換一下,完全可以實(shí)現(xiàn)對(duì)Ruby或Python的支持。
為什么Node選擇了javascript?完全是因?yàn)槌錾腣8引擎。
Node.js里頭沒有DOM和BOM的操作,只保留的JavaScript的語法核心(ES), 并且增加了事件驅(qū)動(dòng)的非阻塞 I/O 模型,使其輕量級(jí)和高效,并且V8是基于ECMAScript標(biāo)準(zhǔn)實(shí)現(xiàn)的,因此Node.js作為服務(wù)運(yùn)行在Windows、Linux、Mac設(shè)備時(shí),把JavaScript的角色從前臺(tái)開發(fā),轉(zhuǎn)移到了后臺(tái)開發(fā)。
Node.js完成了javascript和硬件之間的溝通,充當(dāng)翻譯官的角色。這過程中涉及了兩個(gè)重要的概念:
· runtime
· VM
最出名的runtime當(dāng)屬VC++,借助微軟推出的VC++,開發(fā)者只需要編寫C/C++代碼即可完成Windows程序開發(fā),而不需要考慮與硬件交互的底層操作。同樣的,V8在Node中作為javascript的runtime出現(xiàn),,這與chrome內(nèi)嵌V8的作用是一樣的,不過node針對(duì)IO做了更多的擴(kuò)展,比如FS模塊的實(shí)現(xiàn)等等。
這里關(guān)于另一個(gè)概念VM,泛指二進(jìn)制文件與硬件之間的交互層。作為開發(fā)者所熟知的對(duì)比,C++編譯后的二進(jìn)制文件可以直接被系統(tǒng)調(diào)用,但對(duì)于java而言,編譯好的字節(jié)碼雖然也是二進(jìn)制文件,單必須交給虛擬機(jī)運(yùn)行,虛擬機(jī)完成與系統(tǒng)和硬件的互動(dòng)。這樣的好處是開發(fā)者無需顧忌系統(tǒng)和硬件的差異,由虛擬機(jī)完成不同系統(tǒng)的抽象來實(shí)現(xiàn)同樣的運(yùn)行時(shí)。
因此借助Node.js,目前出現(xiàn)了大批跨平臺(tái)的桌面端開發(fā)工具,比如老牌的NW.js和新興的electron等等。這也引起了javascript語言生命力大爆發(fā),無論是傳統(tǒng)設(shè)備還是物聯(lián)網(wǎng)等各方面都能看到它的影子。
總結(jié)
以上是生活随笔為你收集整理的js怎样和硬件交互_Node.js与JavaScript的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧式装修多少钱啊?
- 下一篇: ssh 登陆mysql数据库_mysql