您的位置:首页 > Web前端 > JavaScript

JS引擎-- Chrome V8 引擎入门

2015-05-15 15:37 330 查看
Note:C++里面要用JS就用V8

link:http://www.cnblogs.com/liuning8023/archive/2012/11/03/2752761.html

https://developers.google.com/v8/intro


本文内容

介绍
关于V8引擎
V8引擎入门
参考资料


介绍

V8是Google开源的、高性能的JavaScript引擎。V8是由C++编写,并用在Google开源浏览器Chrome中。

Google的V8项目旨在帮助那些C++开发者在他们的应用程序中使用V8,以及对V8的设计和性能感兴趣的人。本文及其后的文章将介绍V8,和如何在你的代码中使用V8,并提供一套JavaScriptbenchmarks来测量V8的性能。


关于V8引擎

V8实现了ECMA-262第5版描述的ECMAScript,可运行在Windows(XP或更高)、MacOSX(10.5或更高)和使用IA-32、x64或ARM处理器的Linux系统。

V8编译和执行JavaScript源代码,处理对象内存分配,对不再使用的对象进行回收。V8的垃圾回收(Google自己说是“能停止世界、新一代、准确的垃圾回收”)是其性能的关键。其他的性能方面,如V8设计元素(V8DesignElements)。

JavaScript是浏览器中最常用的客户端脚本,如用来操作DOM(DocumentObjectModel,文档对象模型)。但是,DOM通常由JavaScript提供,而不是浏览器。V8—GoogleChrome就是这样。但是,V8提供所有的数据类型、操作符、对象和ECMA标准规定的函数。

V8可以使任何C++应用程序向JavaScript代码公开自己的对象和函数。由你决定向JavaScript公开你希望的对象和函数。在这方面,有很多应用程序都这么做,如,AdobeFlash和苹果MacOSX中Dashboard部件和和雅虎部件。


V8引擎入门

首先,需要下载V8源代码并生成V8。之后,演示V8代码的"HelloWorld"示例。在演示"HelloWorld"示例时,介绍一些关键的V8概念。

HelloWorld示例
运行HelloWorld示例


HelloWorld示例


把一个JavaScript语句作为一个字符串参数,作为JavaScript代码执行,并输出结果。但是下面代码不能执行,因为它还缺少V8必要的部分。

intmain(intargc,char*argv[]){


//CreateastringcontainingtheJavaScriptsourcecode.

Stringsource=String::New("'Hello'+',World'");


//Compilethesourcecode.

Scriptscript=Script::Compile(source);


//Runthescripttogettheresult.

Valueresult=script->Run();


//ConverttheresulttoanASCIIstringandprintit.

String::AsciiValueascii(result);

printf("%s\n",*ascii);

return0;

}


若真正在V8中运行该示例,还需要添加句柄(handles)、作用域(handlescope)和上下文环境(context):

一个句柄是一个指向对象的指针。所有V8对象都是通过句柄访问,这样V8垃圾回收才能起作用。
一个作用域可以看做任意数量句柄的容器。这样,当使用完句柄后,不用单独删除每个,而是简单删除作用域。
一个上下文环境一个执行环境,允许单独的、不相关的JavaScript代码运行在V8单个实例。必须在你要执行的JavaScript代码中显示指定上下文环境。

这些概念会在嵌入式指南中更多描述。

下面代码同上边一样,但包含了句柄、作用域和上下文环境。另外,也包含了命名空间和V8头文件:

#include<v8.h>


usingnamespacev8;


intmain(intargc,char*argv[]){


//Createastack-allocatedhandlescope.

HandleScopehandle_scope;


//Createanewcontext.

Persistent<Context>context=Context::New();


//Enterthecreatedcontextforcompilingand

//runningthehelloworldscript.

Context::Scopecontext_scope(context);


//CreateastringcontainingtheJavaScriptsourcecode.

Handle<String>source=String::New("'Hello'+',World!'");


//Compilethesourcecode.

Handle<Script>script=Script::Compile(source);


//Runthescripttogettheresult.

Handle<Value>result=script->Run();


//Disposethepersistentcontext.

context.Dispose();


//ConverttheresulttoanASCIIstringandprintit.

String::AsciiValueascii(result);

printf("%s\n",*ascii);

return0;

}



运行HelloWorld示例


你可以按如下步骤运行示例:

下载V8源代码,并按指示生成V8。
复制上面的代码,并另存为hello_world.cpp到V8生成的目录。
编译hello_world.cpp,链接到生成期间创建的静态库。例如,在64位Linux,使用GNU编译器:

g++-Iincludehello_world.cc-ohello_worldout/x64.release/obj.target/tools/gyp/libv8_{base,snapshot}.a-lpthread


命令行执行hello_world可执行文件。例如,在Linux,当前目录为V8目录,输入下面命令:

./hello_world


你会看到终端输出Hello,World!

这仅仅是一个简单的例子,你可能想执行更多脚本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: