完全理解什么是Node.js(一)

到底什么是node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 (node中文网翻译) 换句话说node就是基于JavaScript语言和V-8引擎的开源Web服务器项目,能让JavaScript运行在服务端的开发平台上。前端开发人员刚开始接触node.js的时候,可能有很多概念混淆的地方,因为很少接触服务端的数据处理等操作,于是我对这方面的背景做了一些整理,理解了概念,之后学习的过程才能清晰有效率。

JavaScript:

是一门非常强大的脚本语言,它包含三部分:ECMAScript、DOM、BOM:

  • ECMAScript是JavaScript的核心语法
  • DOM是HTML和XML的应用程序接口(API),用于控制文档的内容与结构
  • BOM(浏览器对象模型)可以对浏览器窗口进行访问和操作

客户端的JavaScript:

目前绝大多数浏览器都有属于他们自己的JS解释器,也就是JavaScript引擎,用来解析嵌入或外部引用在网页中的js代码。浏览器还提供了对DOM的解析,所以客户端的JavaScript不仅应用核心语法ECMAScript,还会操作DOM和BOM。常见的应用场景如用户交互、动画特效、表单验证、发送Ajax请求等等,以上的这些就形成了客户端的JavaScript。

服务端的JavaScript:

此时的JavaScript不依赖浏览器解析,而是由特定的运行环境提供的JavaScript引擎解析执行,例如我们马上就要学习的Node.js。服务器端的JavaScript应用核心语法也是ECMAScript,但是不操作DOM和BOM。它常常用来做一些在客户端做不到的事情,例如操作数据库、操作文件等等。重点:在客户端的ajax操作只能发送请求,而接收请求和做出相应的操作就需要服务器端的JavaScript来完成。

node.js:

不是一门语言,就是提供解析js的特定的运行环境,带有能操作I/O和网络库的V8引擎,因此你能够在浏览器之外使用JavaScript创建shell脚本和后台服务或者运行在硬件上。

总结:客户端的JavaScript主要用来处理页面的交互,而服务器端的JavaScript主要用来处理数据的交互。

1.1 Google浏览器的V8引擎详解:

V8引擎:一种JavaScrip引擎的实现,JavaScript引擎是执行JavaScript代码的程序或解释器。v8是谷歌开源的一个基于C++语言开发的JavaScript引擎,可以实现ECMA-262中规定的ECMAScript,其被用于谷歌浏览器chrome,安卓浏览器,node.js等大型项目当中,V8引擎可以独立运行不依赖于其他环境,也可以嵌入任何的C++应用当中使用。在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码(经常被看作是包含一个执行程序的二进制文件)或解释执行(不依赖平台,编译器会根据不同的平台进行解析),V8将其编译成原生机器码(其实严格来讲是汇编代码)(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。

1.2. V8工作流程

V8将JavaScript代码进行编译,生成抽象语法树(AST),对作用域进行分析,分辨出局部变量或全局变量,再通过JIT技术将语法树直接转换成原生代码,没有经过字节码的编译,节省了编译时间,得到了不是最优的代码,其后通过数据分析器挑选使用频率高的代码进行优化,若优化后的效果不如之前的话就进行优化回滚。

1.3. 除了V8引擎,还有以下JS引擎:

JavaScriptCore: WebKit中默认的JavaScript引擎,它是苹果开源的一个项目,是苹果Safari浏览器的JavaScript引擎,应用较为广泛。
Mozilla
SpiderMonkey,第一款JavaScript引擎,由Brendan Eich在Netscape Communications时编写,用于Mozilla Firefox 1.0~3.0版本。
Rhino,由Mozilla基金会管理,开放源代码,完全以Java编写。
TraceMonkey,基于实时编译的引擎,其中部份代码取自Tamarin引擎,用于Mozilla Firefox 3.5~3.6版本。
JaegerMonkey,德文Jäger原意为猎人,结合追踪和组合码技术大幅提高性能,部分技术借凿了V8、JavaScriptCore、WebKit,用于Mozilla Firefox 4.0以上版本。
微软
Chakra (JScript引擎),中文译名为查克拉,用于Internet Explorer 9的32位版本。
Opera
Linear A,用于Opera 4.0~6.1版本。
Linear B,用于Opera 7.0~9.2版本。
Futhark,用于Opera 9.5~10.2版本。
Carakan,由Opera软件公司编写,自Opera10.50版本开始使用。
等等。。。。。。

1.4. 浏览器端和服务器端JavaScript的组成区别

浏览器端:

  • ECMAScript,描述了JavaScript语言的语法和基本对象
  • 文档对象模型(DOM),描述处理网页内容的方法和接口
  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

服务器端:

  • ECMAScript
  • node.js内置模块:文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值