当前位置: 首页 > 后端技术 > Node.js

Web前端实训Node.js与JavaScript的关系

时间:2023-04-03 23:42:39 Node.js

在Node.js之前,JavaScript只能运行在浏览器中,作为网页脚本来给网页添加一些特效或者与服务器通信。有了Node.js,JavaScript可以脱离浏览器,像其他编程语言一样直接在电脑上使用。它可以为所欲为,不受浏览器的限制。Node.js不是一种新的编程语言,也不是一个JavaScript框架,它是一个支持JavaScript代码执行的JavaScript运行环境。在编程术语中,Node.js是一个JavaScript运行时(Runtime)。现在的JavaScript除了可以用来做web前端编程(webprogramming),还可以做很多事情,比如:开发网站后台,本来擅长PHP等编程语言,Java、Python、红宝石;开发GUI程序,也就是我们常说的带有界面的电脑软件,如QQ、360、迅雷等;手机APP,包括AndroidAPP和iOSAPP;CLI工具,即没有界面的命令行程序。你看,学习了JavaScript,你不仅是全栈工程师,而且是无所不能的,这是Node.js带给我们的。什么是运行时?所谓运行时,就是程序运行时需要依赖的一系列组件或工具;这些工具和组件被打包在一起提供给程序员,程序员可以运行他们编写的代码_前端培训。对于JavaScript来说,运行时需要依赖以下几个组件:1)解释器JavaScript是一种脚本语言,需要同时进行解释和运行,使用哪些源代码编译哪些源代码,以及整个过程由口译员完成。如果没有解释器,JavaScript只是一堆计算机无法读取的纯文本文件。2)标准库我们将在JavaScript代码中调用一些内置函数。这些函数不是我们自己写的,而是标准库自带的。3)本地模块所谓本地模块就是预先编译好的模块。它们是二进制文件,内部结构与可执行文件没有区别,只是不能独立运行。这些本地模块实际上是动态链接库(Windows下的.dll文件)。如果你用过C、C++等编译型语言,应该能更好地理解它们。JavaScript的很多功能都需要本地模块的支持,例如:Cookie用于存储少量的用户数据,是用户电脑上的一个小文件,使用Cookie必须要有文件操作模块的支持.Ajax可以利用互联网向服务器请求数据,这是一种网络操作,必须有网络库支持。逐级跟踪代码的执行过程,查找逻辑错误。这个过程称为调试,需要调试器(Debugger)的支持。JavaScript可以操作HTML,这需要HTML解析模块提前构建DOM树。本地模块一般封装常用功能,对性能要求较高,因此通常使用编译型语言实现,如C语言、C++、汇编语言等。JavaScript解释器需要本地模块的支持,标准库也会调用本地模块在编写时的接口,而我们写的JavaScript代码一般不会直接使用本地模块,所以Web前端程序员接触不到。本地模块是幕后功臣,不起眼,但却不可或缺。总结解释器、标准库、本地模块等各种组件/工具共同支持JavaScript代码的运行,统称为JavaScript运行时。在Node.js之前,JavaScript运行时作为浏览器的各种模块捆绑在浏览器中。这意味着如果你想运行JavaScript代码,你必须启动浏览器。JavaScript逃不出浏览器的手掌,功能受到很大限制,只能作为网页脚本使用。Node.js的组成Node.js运行时主要由V8引擎、标准库和本地模块组成,尤其是本地模块的数量从底层决定了Node.js功能的强弱。1)V8引擎V8引擎是一个JavaScript解释器,负责解析和执行JavaScript代码。V8引擎借鉴了Java虚拟机和C++编译器的多项技术。它将JavaScript代码直接编译成原生机器码,并使用缓存机制来提高性能,这使得JavaScript的运行速度堪比二进制程序。2)本地模块Node.js集成了很多高性能的开源库,用C/C++语言实现,比如:Node.js直接在电脑上运行JavaScript代码,必须赋予JavaScript强大的能力,所以它的localmodule与浏览器中的runtime有很多很大的不同,甚至连联系都很少。Node.js几乎完全放弃了浏览器,从头开始构建了一个新的JavaScript运行时。3)标准库本地模块是用C/C++编写的,而Node.js是面向JavaScript开发者的,所以需要封装本地模块的C/C++接口,为开发者提供一套优雅的JavaScript接口,保持跨平台(操作系统)的不同一致性的接口。这套JavaScript接口就是Node.js标准库。标准库是否优雅、强大决定了Node.js的易用性,直接影响着Node.js的市场表现。综上所述,V8引擎和很多本地模块都是现成的,别人已经造好了轮子。Node.js的主要工作是选择合适的模块,集成它们,编写一个好的JavaScript接口。当然,并不是所有的本地模块都能找到合适的。Node.js也自己写了几个模块,典型的代表就是Libuv。libuv是Node.js最核心最基础的模块,Node.js完全基于Libuv构建。您可能听说过Node.js采用基于事件的单线程异步I/O架构。这是Node.js最大的特点,也是它与其他脚本语言的最大区别。Node.js的这个能力是依赖Libuv实现的。libuv的功能如此强大,以至于官方决定将它从Node.js中分离出来,作为一个单独的网络库发布,并且是开源免费的。现在Libuv已经非常流行,与传统的Libevent、libev库并称为“C/C++三大网络库”。Node.js之所以出名,主要是因为它使用了V8引擎和Libuv库:V8引擎保证了Node.js的高效运行,而Libuv库提供了基于事件循环的异步I/O能力。总结Node.js是一个JavaScript运行时,它可以让JavaScript在没有浏览器环境的情况下直接在电脑上运行,大大扩展了JavaScript的使用范围。我们应该像对待Python、Java、Ruby等其他编程语言一样对待JavaScript,而不要再将其视为“小工具”。最后总结一下JavaScript和Node.js的历史:Netscape浏览器衍生出JavaScript脚本,赋予web编程能力;Chrome浏览器衍生V8引擎,提升JavaScript性能;V8引擎内置Node.js,扩展JavaScript编程能力;Node.js衍生的Libuv库,为Web开发添加了一个优秀的工具。文章来自ProgrammingHelp