JS引擎--ChromeV8引擎⼊门
Note: C++⾥⾯要⽤JS 就⽤V8
本⽂内容
介绍
关于 V8 引擎
V8 引擎⼊门
参考资料
介绍
V8 是 Google 开源的、⾼性能的 JavaScript 引擎。V8 是由 C++ 编写,并⽤在 Google 开源浏览器 Chrome 中。
Google 的 V8 项⽬旨在帮助那些 C ++ 开发者在他们的应⽤程序中使⽤ V8,以及对 V8 的设计和性能感兴趣的⼈。本⽂及其后的⽂章将介绍 V8,和如何在你的代码中使⽤ V8,并提供⼀套 JavaScript bench
marks 来测量 V8 的性能。
关于 V8 引擎
V8 实现了 ECMA-262 第 5 版描述的 ECMAScript,可运⾏在 Windows(XP 或更⾼)、Mac OS X(10.5 或更⾼)和使⽤ IA-32、x64 或 ARM 处理器的 Linux 系统。
V8 编译和执⾏ JavaScript 源代码,处理对象内存分配,对不再使⽤的对象进⾏回收。V8 的垃圾回收(Google ⾃⼰说是“能停⽌世界、新⼀代、准确的垃圾回收”)是其性能的关键。其他的性能⽅⾯,如 V8 设计元素(V8 Design Elements)。
JavaScript 是浏览器中最常⽤的客户端脚本,如⽤来操作 DOM(Document Object Model,⽂档对象模型)。但是,DOM 通常由JavaScript 提供,⽽不是浏览器。V8—Google Chrome 就是这样。但是,V8 提供所有的数据类型、操作符、对象和 ECMA 标准规定的函数。
V8 可以使任何 C++ 应⽤程序向 JavaScript 代码公开⾃⼰的对象和函数。由你决定向 JavaScript 公开你希望的对象和函数。在这⽅⾯,有很多应⽤程序都这么做,如,Adobe Flash 和苹果 Mac OS X 中 Dashboard 部件和和雅虎部件。
V8 引擎⼊门
⾸先,需要下载 V8 源代码并⽣成 V8。之后,演⽰ V8 代码的 "Hello World" ⽰例。在演⽰ "Hello World" ⽰例时,介绍⼀些关键的 V8概念。
Hello World ⽰例
运⾏ Hello World ⽰例
Hello World ⽰例
把⼀个 JavaScript 语句作为⼀个字符串参数,作为 JavaScript 代码执⾏,并输出结果。但是下⾯代码不能执⾏,因为它还缺少 V8 必要的部分。
int main(int argc, char* argv[]) {
// Create a string containing the JavaScript source code.
String source = String::New("'Hello' + ', World'");
// Compile the source code.
Script script = Script::Compile(source);
// Run the script to get the result.
Value result = script->Run();
// Convert the result to an ASCII string and print it.
String::AsciiValue ascii(result);
printf("%s\n", *ascii);
return 0;
}
下⾯代码同上边⼀样,但包含了句柄、作⽤域和上下⽂环境。另外,也包含了命名空间和 V8 头⽂件:#include <v8.h>
using namespace v8;
int main(int argc, char* argv[]) {
// Create a stack-allocated handle scope.
HandleScope handle_scope;
// Create a new context.
Persistent<Context> context = Context::New();
// Enter the created context for compiling and
// running the hello world script.
Context::Scope context_scope(context);
/
/ Create a string containing the JavaScript source code. Handle<String> source = String::New("'Hello' + ', World!'");
// Compile the source code.
Handle<Script> script = Script::Compile(source);
// Run the script to get the result.
Handle<Value> result = script->Run();
// Dispose the persistent context.gnu编译器
context.Dispose();
// Convert the result to an ASCII string and print it.
String::AsciiValue ascii(result);
printf("%s\n", *ascii);
return 0;
}
运⾏ Hello World ⽰例
你可以按如下步骤运⾏⽰例:
下载 V8 源代码,并按指⽰⽣成 V8。
复制上⾯的代码,并另存为 hello_world.cpp 到 V8 ⽣成的⽬录。
编译 hello_world.cpp,链接到⽣成期间创建的静态库。例如,在 64 位 Linux,使⽤ GNU 编译器:g++ -Iinclude -o hello_world lease/obj.target/tools/gyp/libv8_{base,snapshot}.a -lpthread 命令⾏执⾏ hello_world 可执⾏⽂件。例如,在 Linux,当前⽬录为 V8 ⽬录,输⼊下⾯命令:
./hello_world
你会看到终端输出 Hello, World!
这仅仅是⼀个简单的例⼦,你可能想执⾏更多脚本。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论