nodejs介绍和javascript的区别

1. Nodejs 的诞生

话说有个叫 Ryan Dahl 的歪果仁,他的工作是用 C/C++ 写高性能 Web 服务。对于高性能,异步 IO、事件驱动是基本原则,但是用 C/C++ 写就太痛苦了。于是这位仁兄开始设想用高级语言开发 Web 服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步 IO 和异步 IO,但是开发人员一旦用了同步 IO,他们就再也懒得写异步 IO 了,所以,最终,Ryan 瞄向了 JavaScript。

因为 JavaScript 是单线程执行,根本不能进行同步 IO 操作,所以,JavaScript 的这一 “ 缺陷 “ 导致了它只能使用异步 IO。

选定了开发语言,还要有运行时引擎。这位仁兄曾考虑过自己写一个,不过明智地放弃了,因为 V8 就是开源的 JavaScript 引擎。让 Google 投资去优化 V8,咱只负责改造一下拿来用,还不用付钱,这个买卖很划算。

于是在 2009 年,Ryan 正式推出了基于 JavaScript 语言和 V8 引擎的开源 Web 服务器项目,命名为 Node.js。虽然名字很土,但是,Node 第一次把 JavaScript 带入到后端服务器开发,加上世界上已经有无数的 JavaScript 开发人员,所以 Node 一下子就火了起来。

在 Node 上运行的 JavaScript 相比其他后端开发语言有何优势?

最大的优势是借助 JavaScript 天生的事件驱动机制加 V8 高性能引擎,使编写高性能 Web 服务轻而易举。

其次,JavaScript 语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉 JavaScript 就是个 “ 玩具语言 “。但是,在 Node 环境下,通过模块化的 JavaScript 代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的 ECMAScript 6 标准,可以完全满足工程上的需求。

2. nodeJs 和 Javascript 的异同

我相信很多入坑 Nodejs 的人都是前端转过来的,但是局限于公司项目用不到 Nodejs,只能自学,有些重要且基础的东西就忽略了。

前端的 JavaScript 其实是由 ECMAScript、DOM、BOM 组合而成。JavaScript=ECMAScript+DOM+BOM。

2.1 Javascript

  • ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
  • DOM(一些操作页面元素的方法)
  • BOM(一些操作浏览器的方法)

上面是 JavaScript 的组成部分,那么 Nodejs 呢?

2.2 Nodejs

  • ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
  • os(操作系统)
  • file(文件系统)
  • net(网络系统)
  • database(数据库)

分析:很容易看出,前端和后端的 js 相同点就是,他们的语言基础都是 ECMAScript,只是他们所扩展的东西不同,前端需要操作页面元素,于是扩展了 DOM,也需要操作浏览器,于是就扩展了 BOM。而服务端的 js 则也是基于 ECMAScript 扩展出了服务端所需要的一些 API,稍微了解后台的童鞋肯定知道,后台语音有操作系统的能力,于是扩展 os,需要有操作文件的能力,于是扩展出 file 文件系统、需要操作网络,于是扩展出 net 网络系统,需要操作数据,于是要扩展出 database 的能力。

这么一对比,相信很多小伙伴对 nodejs 更加了解了,原来前端和服务端的 js 如此相似,他们的基础是相同的,只是环境不同,导致他们扩展出来的东西不同而已。

3. 总结

在 ecmascript 部分 node 和 JS 其实是一样的,比如与数据类型的定义、语法结构,内置对象。

例如 js 中的顶层对象是 window 对象,但是在 node 中没有什么 window 对象,node 中的顶层对象是 global 对象。