初涉JavaScript的时候,经常会听到ECMAScript, NodeJS,Webkit,V8,PhantomJS什么的,到底这些都是些什么东西,有什么差别呢,在开发中,他们各自的角色又是什么?
[size=large][b]ECMAScript[/b][/size]
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)通过ECMA-262标准化的脚本程序设计语言。凡是兼容ECMA标准的脚本语言就可以称之为ECMAScript,而JavaScript就是其中之一,另外还有微软的JScript等等。其诞生是多个大厂博弈的结果,网景公司在浏览器中引入JavaScript之后,微软等各大公司为了技术优势,都开发了自己的客户端脚本语言,最后为了统一规格,由欧洲计算机制造商协会出面协调,Netscape、Sun、微软、Borland组成的工作组确定了统一标准ECMAScript。
目前主流浏览器都支持了ECMAScript 5.1标准,而ECMAScript 6正在拟定中....,经过2次跳票之后,预计2015年6月发布。
尽管ECMAScript 是一个重要的标准,但它并不是JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。根据ECMA-262的描述“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的... .. ”因此,简单地说,ECMAScript 描述了以下内容: 语法 类型 语句 关键字 保留字 运算符 对象
[size=large][b]JavaScript[/b][/size]
前面提到JavaScript是ECMAScript标准的一个实现,但是除了ECMAScript定义的功能外,其还扩展了一些其它功能。因为JavaScript从诞生之初的目的就是生存于浏览器中,为HTML网页提供动态功能,直到NodeJS创造性的把其运用到了服务器端(这部分后面再聊)。所以一个完整的浏览器端的JavaScript实现是由3个不同部分组成的:
[list]
[*]核心(ECMAScript),就是上一节讲的那货
[*]文档对象模型(DOM), 对HTML和XML进行操作的API,关于DOM的细节可以参见:[url]http://www.cnblogs.com/liusuqi/p/3244970.html[/url]
[*]浏览器对象模型(BOM),对浏览器窗口进行访问和操作的API,关于BOM的细节可以参见:[url]http://blog.sina.com.cn/s/blog_636415010100z3ws.html[/url]
[/list]JavaScript是一种解释性脚本语言(代码不进行预编译),直接通过解释器运行,这个解释器是浏览器的一部分,我们称之为JavaScript引擎。
[size=large][b]JavaScript引擎[/b][/size]
JavaScript引擎是一个专门处理JavaScript脚本的软件程序,也有称之为JavaScript虚拟机的。一般会附带在网页浏览器中. 各个浏览器都有自己的引擎。具体可以到这篇文章中去查看:[url]http://jser.in/%E6%B1%87%E6%80%BB%E5%90%84%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A0%B8%E5%BF%83js%E5%BC%95%E6%93%8E%E5%8F%8A%E6%8E%92%E7%89%88%E5%BC%95%E6%93%8E%E6%B7%B1%E7%A9%B6-295.shtml[/url]
因此,我们平时提到的V8就是Chrome浏览器使用的JavaScript引擎。因为其高性能,NodeJS也是基于该引擎实现,因此听到的概率高于其它引擎。
[size=large][b]排版引擎(浏览器内核)[/b][/size]
WebKit是一个排版引擎,主要设计是用来让网页浏览器绘制网页。WebKit目前作为Apple Safari及Google Chrome(直到版本27,后续的版本已切换到自家的Blink)等浏览器的主要引擎。浏览器的排版引擎(Layout Engine或Rendering Engine)也被称为浏览器内核、页面渲染引擎或样版引擎,它负责获取网页的内容(HTML、XML、图像等等)、整理消息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要根据表示性的标记语言(Presentational markup)来显示内容的应用程序都需要排版引擎。即其负责了整个浏览器的工作。有兴趣的可以看一下这篇文章《开发者需要了解的WebKit》:[url]http://www.infoq.com/cn/articles/webkit-for-developers[/url], 如果有时间,再看看浏览器是如何工作的就更有收获了:[url]http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/[/url],和 [url]http://coolshell.cn/articles/9666.html[/url]
而PhantomJS是一个无界面的WebKit,这样程序员就可以在命令行中模拟所有浏览器操作了,尤其是在做自动化测试时,无界面的WebKit运行速度会快很多,但是注意,因为其是基于WebKit的,所以并不能保证所有的浏览器下的行为都和测试的一致。
参考文献:
[url]http://zh.wikipedia.org/wiki/ECMAScript[/url] [url]http://zh.wikipedia.org/wiki/JavaScript[/url] [url]http://blog.sina.com.cn/s/blog_636415010100z3ws.html[/url]
[url]http://blog.csdn.net/teamossp/article/details/12715315[/url]
[url]http://zh.wikipedia.org/wiki/JavaScript%E5%BC%95%E6%93%8E[/url]
[size=large][b]ECMAScript[/b][/size]
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)通过ECMA-262标准化的脚本程序设计语言。凡是兼容ECMA标准的脚本语言就可以称之为ECMAScript,而JavaScript就是其中之一,另外还有微软的JScript等等。其诞生是多个大厂博弈的结果,网景公司在浏览器中引入JavaScript之后,微软等各大公司为了技术优势,都开发了自己的客户端脚本语言,最后为了统一规格,由欧洲计算机制造商协会出面协调,Netscape、Sun、微软、Borland组成的工作组确定了统一标准ECMAScript。
目前主流浏览器都支持了ECMAScript 5.1标准,而ECMAScript 6正在拟定中....,经过2次跳票之后,预计2015年6月发布。
尽管ECMAScript 是一个重要的标准,但它并不是JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。根据ECMA-262的描述“ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的... .. ”因此,简单地说,ECMAScript 描述了以下内容: 语法 类型 语句 关键字 保留字 运算符 对象
[size=large][b]JavaScript[/b][/size]
前面提到JavaScript是ECMAScript标准的一个实现,但是除了ECMAScript定义的功能外,其还扩展了一些其它功能。因为JavaScript从诞生之初的目的就是生存于浏览器中,为HTML网页提供动态功能,直到NodeJS创造性的把其运用到了服务器端(这部分后面再聊)。所以一个完整的浏览器端的JavaScript实现是由3个不同部分组成的:
[list]
[*]核心(ECMAScript),就是上一节讲的那货
[*]文档对象模型(DOM), 对HTML和XML进行操作的API,关于DOM的细节可以参见:[url]http://www.cnblogs.com/liusuqi/p/3244970.html[/url]
[*]浏览器对象模型(BOM),对浏览器窗口进行访问和操作的API,关于BOM的细节可以参见:[url]http://blog.sina.com.cn/s/blog_636415010100z3ws.html[/url]
[/list]JavaScript是一种解释性脚本语言(代码不进行预编译),直接通过解释器运行,这个解释器是浏览器的一部分,我们称之为JavaScript引擎。
[size=large][b]JavaScript引擎[/b][/size]
JavaScript引擎是一个专门处理JavaScript脚本的软件程序,也有称之为JavaScript虚拟机的。一般会附带在网页浏览器中. 各个浏览器都有自己的引擎。具体可以到这篇文章中去查看:[url]http://jser.in/%E6%B1%87%E6%80%BB%E5%90%84%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A0%B8%E5%BF%83js%E5%BC%95%E6%93%8E%E5%8F%8A%E6%8E%92%E7%89%88%E5%BC%95%E6%93%8E%E6%B7%B1%E7%A9%B6-295.shtml[/url]
因此,我们平时提到的V8就是Chrome浏览器使用的JavaScript引擎。因为其高性能,NodeJS也是基于该引擎实现,因此听到的概率高于其它引擎。
[size=large][b]排版引擎(浏览器内核)[/b][/size]
WebKit是一个排版引擎,主要设计是用来让网页浏览器绘制网页。WebKit目前作为Apple Safari及Google Chrome(直到版本27,后续的版本已切换到自家的Blink)等浏览器的主要引擎。浏览器的排版引擎(Layout Engine或Rendering Engine)也被称为浏览器内核、页面渲染引擎或样版引擎,它负责获取网页的内容(HTML、XML、图像等等)、整理消息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要根据表示性的标记语言(Presentational markup)来显示内容的应用程序都需要排版引擎。即其负责了整个浏览器的工作。有兴趣的可以看一下这篇文章《开发者需要了解的WebKit》:[url]http://www.infoq.com/cn/articles/webkit-for-developers[/url], 如果有时间,再看看浏览器是如何工作的就更有收获了:[url]http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/[/url],和 [url]http://coolshell.cn/articles/9666.html[/url]
而PhantomJS是一个无界面的WebKit,这样程序员就可以在命令行中模拟所有浏览器操作了,尤其是在做自动化测试时,无界面的WebKit运行速度会快很多,但是注意,因为其是基于WebKit的,所以并不能保证所有的浏览器下的行为都和测试的一致。
参考文献:
[url]http://zh.wikipedia.org/wiki/ECMAScript[/url] [url]http://zh.wikipedia.org/wiki/JavaScript[/url] [url]http://blog.sina.com.cn/s/blog_636415010100z3ws.html[/url]
[url]http://blog.csdn.net/teamossp/article/details/12715315[/url]
[url]http://zh.wikipedia.org/wiki/JavaScript%E5%BC%95%E6%93%8E[/url]