Node.js详解(二):Node.js与JS的关系
一、简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言。它是一种高级的、解释型的编程语言;它是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。
传统的js是运行在浏览器上的,因为浏览器内核分为两个部分:
- 渲染引擎—渲染HTML和CSS
- JavaScript 引擎—负责运行 JavaScript
如果要执行JavaScript代码,需要一个js引擎,你可以安装一个浏览器(内置js引擎),或nodejs环境(内置js引擎),如果你在js代码中调用了浏览器提供的API,则必须安装一个浏览器,若调用了nodejs API,则必须安装nodejs环境,然后以各自规定的方式加载、执行JavaScript代码。
二、Node.js的历史
2008年左右,随着 AJAX 的逐渐普及,Web 开发逐渐走向复杂化,系统化;
2009年2月,Ryan Dahl 想要创建一个轻量级,适应现代 Web 开发的平台;
2009年5月,Ryan Dahl 在 GitHub 中开源了最初版本,同年11月,JSConf 就安排了 Node 讲座;
2010年底,Joyent 公司资助,Ryan Dahl 也加入了该公司,专门负责 Node 的开发;
2011年7月,在微软的支持下登陆 Windows 平台。PS:node 的生产环境基本是在 Linux 下。
据 Node.js 创始人 Ryan Dahl 回忆,他最初希望采用 Ruby,但是 Ruby 的虚拟机效率不行。
注意:是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。
NodeJS的作者说,他创造NodeJS的目的是为了实现高性能Web服务器,他首先看重的是事件机制和异步IO模型的优越性,而不是JS。但是他需要选择一种编程语言实现他的想法,这种编程语言不能自带IO功能,并且需要能良好支持事件机制。JS没有自带IO功能,天生就用于处理浏览器中的DOM事件,并且拥有一大群程序员,因此就成为了天然的选择。
如他所愿,NodeJS在服务端活跃起来,出现了大批基于NodeJS的Web服务。而另一方面,NodeJS让前端众如获神器,终于可以让自己的能力覆盖范围跳出浏览器窗口,更大批的前端工具如雨后春笋。
因此,对于前端而言,虽然不是人人都要拿NodeJS写一个服务器程序,但简单可至使用命令交互模式调试JS代码片段,复杂可至编写工具提升工作效率。
三、Node.js与js的区别
1、node.js是平台,Js是编程语言;
2、js是客户端编程语言,需要浏览器的JavaScript解释器进行解释执行;
3、node.js是一个基于Chrome JavaScript运行时建立的平台,它是对Google V8引擎进行了封装的运行环境;
4、node.js就是把浏览器的解释器封装起来作为服务器运行平台,用类似JavaScript的结构语法进行编程,在node.js上运行。
5、node.js与js组成不同
JavaScript:
ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
-
DOM(一些操作页面元素的方法)
-
BOM(一些操作浏览器的方法)
Node.js:
-
ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
-
OS(操作系统)
-
file(文件系统)
-
net(网络系统)
-
database(数据库)
6、顶层对象不同
在JS中的顶层对象是window对象,但是在node中没有什么window对象,node中的顶层对象是global对象。这就是二者的差异性。
在window对象中,定义一个全局变量是可以通过Window来访问的,但是在node中是不能通过global对象来访问的
优缺点:
1.原生js运行文件依赖于浏览器;
2.nodejs运行文件的时候服务为终端;
3.原生js有兼容性问题,nodejs不存在兼容性问题;
4.nodejs可以进行本地的读写,服务器搭建,连接数据库等,而原生js无法做到。
(1)使用node开发还可以使用node自有配套的npm包管理工具:
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从npm服务器下载别人编写的第三方包到本地使用。
允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。
Node.js 的使用包管理器 npm来管理所有模块的安装、配置、删除等操作,使用起来非常方便。
(2)node本身就是一个服务端的框架,对于一些简单的项目,我们可以不需要后端配合,直接用node进行数据库的增删改查(但是我们一般不使用这个功能);
(3)nodejs是一个服务js平台,有自身带的npm(基于 Node.js的前端项目包管理工具),有第三方的grunt(基于 Node.js的前端项目构建工具,即脚手架)、有第三方的express(路由功能)等强大的代码与项目管理应用。还有自身带的webpack(基于 Node.js的前端项目部署打包工具),v8(谷歌客户端浏览器Javascript引擎)等强大的功能。
npm(包管理工具)是基于 Node.js的前端项目包管理工具,是项目中对各种程序包的依赖管理,传统的开发项目主要是后端,现在技术在更新,前端有了框架的开发模式管理,也需要用包管理工具的思想去管理,目的是简化第三方程序包在项目中引用复杂化。前端的js包是全世界JavaScript 天才开发共享的各种代码模块,把这些代码模块都按照一个独立的软件功能统一在一个库中,一个代码模块是一个程序包(package,即代码模块)。
四、总结
就前端来说nodejs具有划时代的意义,
nodejs不是一个js框架,千万不要认为是类似jquery的框架,
nodejs是js运行时,运行环境,类比java中jvm,
java的开端是什么,无疑是jvm,自从有了jvm,java才能做到“一次编写处处运行”,
不管你是windows还是linux,只要安装了对应版本的jvm都可以运行.class文件。
同样,nodejs的作用和JVM是一样的,也是js的运行环境,不管是你是什么操作系统,
只要安装对应版本的nodejs,那你就可以用js来开发后台程序。
这具有划时代的意义,意味着一直以来只能在浏览器上玩来玩去的JS,可以做后端开发了,
自从有了nodejs后就催生出一大批用js做后台开发的前端人员,这部分人员就是偏前端的“全栈程序员”。
记住,nodejs是和jvm同等地位的js运行环境,打开了前端人员走向后端的道路。