js怎样和硬件交互_Node.js与JavaScript

有很多介绍nodejs的文章,也有很多教程,覆盖了服务器开发、桌面开发、移动端等等,但是鲜有文章明确的回答过一个问题:Node是什么?

8a9f82cad56597097911145176856ab3.png

这看起来是一个再简单过的问题了,真要答起来可不容易,不去深入研究的话可能会认为Node就是javascript,javascript就是Node,笔者最初也是这么认为的,但这种想法并不正确。

要寻求正确的答案首先要弄明白Node与JavaScript的关系,在Node官网是这样描述的:

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

大概的意思就是Node是一个支持javascript的运行时(runtime),是用来完成运行脚本所需要的系统底层支持。严格的说来,Node支持的只是ECMAScript语法,它属于javascript的一部分。

294cd3aba62606d6f3c61528ff368f25.png

① ECMAScript:描述了该语言的语法和基本对象。

② DOM:文档对象模型,处理网页内容的方法和接口。

③ BOM:浏览器对象模型,与浏览器进行交互的方法和接口。

对于编程语言而言,语法的作用是面向开发者所体现的,最终交付于硬件执行的效果却是体现在解释/编译器上的。Node采用C++实现与系统底层的互动,遵循的语法是ECMAScript,当然如果把内核的V8引擎更换一下,完全可以实现对Ruby或Python的支持。

eec93af6dc2d2901e0c86e10ec9d5774.png

为什么Node选择了javascript?完全是因为出色的V8引擎。

Node.js里头没有DOM和BOM的操作,只保留的JavaScript的语法核心(ES), 并且增加了事件驱动的非阻塞 I/O 模型,使其轻量级和高效,并且V8是基于ECMAScript标准实现的,因此Node.js作为服务运行在Windows、Linux、Mac设备时,把JavaScript的角色从前台开发,转移到了后台开发。

b02fcb2624535a2119f4c7e43a347150.png

Node.js完成了javascript和硬件之间的沟通,充当翻译官的角色。这过程中涉及了两个重要的概念:

· runtime

· VM

最出名的runtime当属VC++,借助微软推出的VC++,开发者只需要编写C/C++代码即可完成Windows程序开发,而不需要考虑与硬件交互的底层操作。同样的,V8在Node中作为javascript的runtime出现,,这与chrome内嵌V8的作用是一样的,不过node针对IO做了更多的扩展,比如FS模块的实现等等。

7887510401ffe714d04a6eb346da31aa.png

这里关于另一个概念VM,泛指二进制文件与硬件之间的交互层。作为开发者所熟知的对比,C++编译后的二进制文件可以直接被系统调用,但对于java而言,编译好的字节码虽然也是二进制文件,单必须交给虚拟机运行,虚拟机完成与系统和硬件的互动。这样的好处是开发者无需顾忌系统和硬件的差异,由虚拟机完成不同系统的抽象来实现同样的运行时。

82e2eb2fe523f564398998b97c4a209f.png

因此借助Node.js,目前出现了大批跨平台的桌面端开发工具,比如老牌的NW.js和新兴的electron等等。这也引起了javascript语言生命力大爆发,无论是传统设备还是物联网等各方面都能看到它的影子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值