javascript的V8引擎的初步使用

原创 2018年04月17日 15:33:07
这段时间在使用javascript,常常地想javascript是怎么样运行呢?又是怎么样从JS代码转换为机器码呢?在深入了解JS运行机制之前,先来运行一下V8引擎也是入门的前奏。由于不能访问chrome浏览器开源网站,因此使用nodejs的代码,Node.js可以看作是javascritp的运行时环境(JsRE),一方面,它提供了多种可调用的例如读写文件,网络请求,系统信息等API。另一方面,因为CPU执行的是一系列的机器码,它还负责将js代码解释成机器码执行,这部分工作是由V8引擎完成。V8是node的心脏,其诞生之初的目标,就是为了提高js的执行效率,它甚至直接将js编译为本地机器码,以节省一般脚本程序解释执行的时间。所以使用nodejs代码,也可以使用它里面的V8引擎的。
至于怎么样编译nodejs,请参考nodejs的网站,经过编译之后,就会生成下面的lib文件:
v8_base_0.lib;v8_base_1.lib;v8_base_2.lib;v8_base_3.lib;v8_libbase.lib;v8_libplatform.lib;v8_nosnapshot.lib;icui18n.lib;icuucx.lib;icustubdata.lib;
然后再在项目里包含头文件目录:
D:\AI\sample\Nodejs_src\node-v6.11.3\deps\v8\include

接着使用VS2015社区版本,记得一定使用它,目前只支持这个编译器,并且只支持WIN7和之后的系统。
创建一个控制台应用程序,代码如下:
// TestV8.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <malloc.h>  
#include <stdlib.h>
#include <memory>
#include <v8.h>
#include <libplatform/libplatform.h>

#pragma comment(lib,"winmm.lib")


using namespace v8;

class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public:
	virtual void* Allocate(size_t length) {
		void* data = AllocateUninitialized(length);
		return data == NULL ? data : memset(data, 0, length);
	}
	virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
	virtual void Free(void* data, size_t) { free(data); }
};

int main(int argc, char* argv[])
{
	V8::InitializeICU();
	Platform* platform = platform::CreateDefaultPlatform();
	V8::InitializePlatform(platform);
	V8::Initialize();

	// 创建一个新的Isolate和并设置为当前使用
	v8::Isolate::CreateParams create_params;
	ArrayBufferAllocator buf;
	create_params.array_buffer_allocator = &buf;
	Isolate* isolate = Isolate::New(create_params);
	
	{
		Isolate::Scope isolate_scope(isolate);

		// 创建栈范围句柄
		HandleScope handle_scope(isolate);

		// 创建上下环境变量
		Local<Context> context = Context::New(isolate);

		// 编译和运行“hello world”脚本
		Context::Scope context_scope(context);

		// 创建一个字符串包含JavaScript的脚本源码
		Local<String> source = String::NewFromUtf8(isolate, "function sum(a, b){return a+b;}; 'Hello' + ', World! ' + sum(1,2);");

		// 编译脚本
		Local<Script> script = Script::Compile(source);

		// 运行脚本代码
		Local<Value> result = script->Run();

		// 输出脚本运行结果,从UTF8字符串转换为普通字符串并打印输出
		String::Utf8Value utf8(result);
		printf("%s\n", *utf8);
	}

	// 删除isolate,释放V8资源,删除平台资源。
	isolate->Dispose();
	V8::Dispose();
	V8::ShutdownPlatform();

	delete platform;
	platform = nullptr;

    return 0;
}



运行结果如下:


可以看js的脚本运行结果是 Hello, World! 3,后面的3是函数sum(a,b)的计算结果。

比特币源码入门教程

https://edu.csdn.net/course/detail/6998

深入浅出Matplotlib
https://edu.csdn.net/course/detail/6859

深入浅出Numpy
http://edu.csdn.net/course/detail/6149 

Python游戏开发入门

你也能动手修改C编译器


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caimouse/article/details/79975616

C语言及程序设计初步

课程针对没有任何程序设计基础的初学者,全面介绍C语言及利用C语言进行程序设计的方法。课程注重知识的传授,更关注学习者能够通过实践的方式,真正学会利用C语言解决问题,奠定程序设计的基础。为此,专门设计了实践方案,指导学习者在听讲的同时,有效完成实践。讲课中还适时穿插进行学习指导,帮助初学者尽快掌握程序设计的学习方法。
  • 2015年01月05日 10:08

Google V8 JavaScript引擎在服务器端的使用

v8简介: V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中 V8在执行之前将JavaScript编译成了机器码,而非位元组码或是直译它,以此提升效...
  • runnerchen1
  • runnerchen1
  • 2016-02-15 17:01:47
  • 3236

V8 javascript引擎初步体验

v8 引擎,不必多说,大名鼎鼎,迄今最快的js引擎。 这么好的东西,如果尽在浏览器中使用,太浪费了,也希望用到其他地方,比如一些客户端开发中。 闲言少讲,这就开始 下载源码 去官方网站:htt...
  • doon
  • doon
  • 2014-06-19 13:23:59
  • 21959

JS引擎-- Chrome V8 引擎入门

link:http://www.cnblogs.com/liuning8023/archive/2012/11/03/2752761.html https://developers.google.c...
  • xyqzki
  • xyqzki
  • 2015-05-15 15:37:59
  • 10628

在.NET中利用Google JS V8 Engine实现脚本引擎

原文地址:http://blog.csdn.net/wangjia184/article/details/8520725在.NET中可供集成的脚本语言有很多种选择,LUA 和 Python 都有非常成...
  • wangjia184
  • wangjia184
  • 2013-01-19 20:57:13
  • 9913

基于V8引擎的C++和JS的相互交互

基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎。去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行: 脚本可能是一个表达式;一段js代码;或...
  • xuehaiwuya_1
  • xuehaiwuya_1
  • 2014-08-06 20:47:57
  • 2334

在Android上使用Google V8 JS 引擎

在Android上使用Google V8 JS 引擎
  • absurd
  • absurd
  • 2015-08-15 06:59:01
  • 9279

易语言使用v8引擎(基于UseDotNet)

易语言使用v8引擎(基于UseDotNet) v8.e 中的 V8Engine类 与 Handle类 是由 类库查看器生成的代码 /----...
  • Exiaoyin
  • Exiaoyin
  • 2016-06-25 14:18:13
  • 985

V8 引擎使用心得

在公司一直负责一个界面引擎的模块的设计开发工作,主要使用XML和JavaScript两种技术。 最初我们使用的是MS的JS引擎(由IActiveScript及一些相关接口组成,下称MS-JS),后来...
  • i7thTool
  • i7thTool
  • 2016-12-18 11:01:15
  • 2256

JavaScript 引擎性能比较之二Google V8

还是和上一篇一样的 javascript arraysort.js, 现在由 V8 来执行, 看看测试结果如何 function random_str() { var text = ""; ...
  • fanyamin
  • fanyamin
  • 2015-05-10 08:33:12
  • 4068
收藏助手
不良信息举报
您举报文章:javascript的V8引擎的初步使用
举报原因:
原因补充:

(最多只允许输入30个字)