🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
V8给Chrome浏览器带来一个强劲的心脏,使得它在浏览器大战中脱颖而出,也使Ryan Dahl在评估后为选择JavaScript增加了极大的权重。这里我们谈谈Node给JavaScrpt带来的一个新局面。鉴于Node之前那些不给力的后端JavaScript实现,在性能和编程模型等方面没能达到与其他语言一较高下的程度,这里先撇开不谈,先谈谈Node与浏览器的对比。 Chrome浏览器和Node的组件构成如图所示: ![](https://box.kancloud.cn/2016-08-25_57bdc8fa599f4.png) 浏览器中除了V8作为JavaScript引擎以外,还有一个WebKit布局引擎。HTML5在发展过程中定义了更多丰富的API。在实现上,浏览器提供了越来越多的新功能暴露给JavaScript和HTML标签。这个愿景美好,但对于浏览器的发展现状,HTML5标准统一的过程是相对缓慢的。JavaScript作为一门图灵完备的语言,长久以来却限制在浏览器的沙箱中运行,它的能力取决于浏览器中间层提供的支持有多少。 除了HTML、WebKit和显卡这些UI相关的技术没有支持外,Node的结构与Chrome十分相似。 它们都是基于事件驱动的异步架构,浏览器通过事件驱动来服务界面上的交互,Node通过事件驱动来服务 I/O ,这个细节将在第3章中详述。在Node中,JavaScript可以随心所欲的访问本地文件,可以搭建WebSocket服务器端,可以连接数据库,可以如Web Workers一样玩转多进程。如今,JavaScript可以运行在不同地方,不再继续限制在浏览器中与CSS样式表、DOM树打交道。如果HTTP协议栈是水平面,Node就是浏览器在协议栈另一边的倒影。Node不处理UI,但用和浏览器相同的机制和原理运行。Node打破了过去JavaScript只能在浏览器运行的局面。前后端编程环境统一,可以大大降低前后端转换所需要的上下文交换代价。 对于前段工程师,自己熟悉的JavaScript如今竟然可以在另一个地方放出异彩,仅仅因为好奇,就值得去关注和探索它。 > 随着Node的出现,关于JavaScript的想象总是无限的。目前,社区已经出现node-webkit这样的项目,这个项目在2012年的沪JS会议上首次介绍给公众。如同上文提及的关于浏览器的优势和限制,在node-webkit项目中,它将Node中的事件循环和WebKit的事件循环融合在一起,既可以通过它享受HTML、CSS带来的UI构建,也能通过它访问本地资源,将两者的优势整合在一起。桌面应用程序的开发可以完全通过HTML、CSS、JavaScript完成。