JavaScript引擎研究与C互相调用

JavaScript引擎研究与C互相调用

ID:43445695

大小:76.90 KB

页数:34页

时间:2019-10-02

JavaScript引擎研究与C互相调用_第1页
JavaScript引擎研究与C互相调用_第2页
JavaScript引擎研究与C互相调用_第3页
JavaScript引擎研究与C互相调用_第4页
JavaScript引擎研究与C互相调用_第5页
资源描述:

《JavaScript引擎研究与C互相调用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaScript弓

2、擎研究与C、C++与互调用博客分类:•软件程式-JsvdScriptjavascriptc++脚本1.概要JavaScript是•种广泛用于Web客八端开发的脚本语吉,常用來控制浏览器的DOM树,给HTML网页添加动态功能。目前JavaScript遵循的web标准的是ECMAScript2620由于JavaScript提供了丰富的内置函数、良好的对象机制。所以JavaScript还可以嵌入到某-种宿主语言中,弥补宿主语言的表现力,从而实现快速、灵活、可定制的开发。现有的主流浏览器基本上都实现

3、了-个白己的JavaScript引擎。这吐JavaScript引擎可以分析、编译和执行JavaScript脚本。这JavaScript引擎都是用C或者C++语言写的,都对外提供了API接口。所以在C、C++语言屮使用这吐JavaScript引擎,嵌入JavaScript是非常方便的。有-•些著名的开源项目都使用了这一种方式,來进行混合的编程,比如Node.js,K-3D等。已知著名的JavaScript引擎有Google的V8引擎、IE的Trident引擎、Firefox的SpiderMonkey引擎、Webkit

4、的JavaScriptCore引擎、Opera的Carakan引擎(非开源的,本文没有分析)等。这些JavaScript引擎对外提供的API接口在细节上各不相同,但是这些API的•个基本的设计思路都类似°C、C++要使用这些引擎,首先要获得-个全局的Global对象。这个全局的Global对象有属性、方法、事件。比如在JavaScript环境屮育-个window窗口对象。它描述的是-个浏览器窗口。-般JavaScript要引用它的属性和方法时,不需要用“window.xxx”这种形式,而盲接使用“xxx”。它是Ja

5、vaScript'I1最大的对象,所有的其他JavaScript对象、函数或者是它的子对彖,或者是子对象的子对象。C、C++通过对这个最大的Global对象调用get、set操作就可以实现与JavaScript进行双向交互了。卜•面的介绍涉及到比较多的代码细节,先给个结论吧,不想看C++细节代码可以不看了。编写语言API接口C、C++打JavaScript交互(变量、函数、类)windowsxpvc2005编译静态库的大小示例EXE的大小执行、解析JavaScript的速度GoogleV8C++C++可以23.1M

6、1.1M最快Firefox3.5以前SpiderMonkeyCC可以1.3M500K慢Firefox高丿皈本C++C可以15.3M1.7M一般SpiderMonkeyWebkitJavaScriptCoreC++C可以26.2M1.4M一般IE未知COM可以未知100K(没有链接库)一般如果优先考虑序的体积,建议使用Firefox的老版本。对执行效率有要求的话,建议使用V8。1.GoogleV82丄介绍GoogleChrome是google2008年9月发布的浏览器,Chrome的网页渲染部分使用的是Webkit的

7、渲染引擎,Chrome的JavaScript引擎就是人名鼎鼎的V8了。V8是C++语言编写的,是开放源码的,是所有的JavaScript引擎屮速度最块的。其开源项日地址为:httD://code.google.com/D/v8。V8对外的API接口是C++的接口。V8的API定义了几个基本概念:句柄(handle),作用域(scope),上下文环境(Context)。模板(Templates),了解这些基木的概念才可以使用V8oI上下文环境Context就是脚木的运行环境,JavaScript的变最、函数等都存在于

8、上下文环境Context'poContext可以嵌套,即当前函数有一个Context,调用其它函数时如果又有•个Context,则在被调用的函数屮javascript是以最近的Context为准的,当退出这个函数时,又恢复到了原来的ContextsI句柄(handle)就是一个指向V8对象的指针,有点像C++的智能指针。所有的v8对象必须使用句柄来操作。没有句柄指向的V8对象,很快会被垃圾回收器回收了。I作用域(scope)是句柄的容器,一个作用域(scope)可以有很多句柄(handle)。当离开一个作用域(sc

9、ope)时,所有在作用域(scope)里的彳U柄(handle)都会被释放了。I模板(Templates)分为函数模板和对象模板,是V8对JavaScript的函数和对象的封装。方便C++语言操作JavaScript的函数和对象。IV8API定义了一组类或者模板,用来与JavaScript的语言概念一一对应。比如:V8的Function模板与JavaScri

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。