没有合适的资源?快使用搜索试试~ 我知道了~
首页Google V8学习手记,月javascript写服务器端是多少人的梦醒呀,Google v8让javascript和php一样
Google V8学习手记,月javascript写服务器端是多少人的梦醒呀,Google v8让javascript和php一...
5星 · 超过95%的资源 需积分: 31 41 下载量 193 浏览量
更新于2023-03-03
评论
收藏 114KB PDF 举报
目录 ================= 一、Google v8 整体印象 1.1 Google v8是什么,能做什么? 1.2 Google v8的获取及编译 1.2.1 获取源码 1.2.2 编译类库及示例 二、Google v8入门 2.1 v8的基本概念 2.2 从HelloWorld开始 2.3 在C++中访问Javascript的变量及函数 2.4 在Javascript中访问C++全局函数及变量 2.5 在C++中“声明”“Javascript类”, 供Javascript实例化 2.6 封装完整的C++类到Javascript中,供Javascript实例化 三、Google v8的开源应用 3.1 Node.js 3.2 v8cgi 四、参考资料 五、本文源码
资源详情
资源评论
资源推荐
Google v8学习笔记
1 / 18
Google Javascript 脚本引擎 v8 学习笔记
pansunyou@gmail.com
2010.11.14 于遵义
V0.1
目录
一、Google v8 整体印象 ..................................................................................................... 2
1.1 Google v8 是什么,能做什么? ...................................................................................... 2
1.2 Google v8 的获取及编译 ............................................................................................ 2
1.2.1 获取源码 .............................................................................................................. 2
1.2.2 编译类库及示例 .................................................................................................. 3
二、Google v8 入门.............................................................................................................. 3
2.1 v8 的基本概念 ............................................................................................................ 3
2.2 从 HelloWorld 开始 ..................................................................................................... 5
2.3 在 C++中访问 Javascript 的变量及函数 ..................................................................... 5
2.4 在 Javascript 中访问 C++全局函数及变量 ................................................................. 9
2.5 在 C++中“声明”“Javascript 类”, 供 Javascript 实例化 ..................................... 15
2.6 封装完整的 C++类到 Javascript 中,供 Javascript 实例化 ....................................... 16
三、Google v8 的开源应用 ................................................................................................ 16
3.1 Node.js ...................................................................................................................... 16
3.2 v8cgi .......................................................................................................................... 17
四、参考资料 .................................................................................................................... 17
五、本文源码 .................................................................................................................... 18
Google v8学习笔记
2 / 18
一、Google v8 整体印象
1.1 Google v8 是什么,能做什么?
v8 是一款 Javascript 脚本引擎,它开放源代码,由 Google 丹麦开发,是 Google Chrome
的一部分。
和其它脚本语言(php,lua,python 等)一样,Javascript 也可以内嵌于应用程序,和编译
性语言(c/c++等)交互。由于 v8 是用 C++写的,所以在 C++中使用 javascript 显得更加的自然。
通过在应用程序中引入脚本解析器,将一些业务逻辑交由脚本实现,可以使得系统更加灵活。
C/C++的高效,Javascript 的灵巧多变,使得我们的应用程序可以兼顾性能和效率。
说得再具体直白一点,就是我们可以通过编写 javascript 脚本来操作 C++提供的类,可
以编写 javascript 函数供 C++调用。像下面这样写 javascript 一定非常爽吧?
var
socket
=
new
Socket(Socket.PF_INET,
Socket.SOCK_STREAM,
Socket.IPPROTO_TCP);
socket.setOption(Socket.SO_REUSEADDR,
true);
var
conn
=
socket.connect("www.cppblog.com",
80);
if
(conn){
var
httpHeader
=
"GET /pansunyou HTTP/1.1\r\nHost: www.cppblog.com\r\n\r\n";
socket.send(httpHeader);
var
responseText
=
socket.receive(12000);
printf("responseText="+responseText+"\n\n");
}
socket.close();
至于其性能,好吧,算我迷信,Google 出品一定差不到哪里去。再是我也未完全明白
它的原理,就不抄网上的文字了,可以本文的参考资料看到相关的介绍文档。
1.2 Google v8 的获取及编译
1.2.1 获取源码
Google v8 以源码的形式提供,其开源项目地址为:http://code.google.com/p/v8/
在 linux 下,可以使用以下命令获取其源码:
svn checkout http://v8.googlecode.com/svn/trunk/ v8
在 windows 下,可以 TortoiseSVN 导出源码:
Google v8学习笔记
3 / 18
1.2.2 编译类库及示例
Google V8 的编译需要使用 Scons(大概类似于 Makefile 或者 CMake 之类),而 Scons 需要
使用 Python2.x,所以需要先安装这两玩意儿。 记得 python 一定要是 2.x系列的,否则灰常
灰常的郁闷。
http://www.python.org/
http://www.scons.org/
Windows 平台,进入命令后先运行,以初始化 vc 编译环境。
cmd /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
进入 v8 源码目录,执行 Scons --help 可查看编译选项。因为我是用来学习的,所以我编
译 debug 版本,并且选择打印尽可能多的消息。在 windows 下,尽量选择编译为动态库吧,
在为静态的 v8.lib 有 160MB 之巨,一个 helloworld 程序都要链接个半天。
我的编译选项:
scons mode=debug verbose=on library=shared msvcrt=static
编译结果为同目录下的 v8_g.lib 和 v8_g.dll,release 编译时无_g 后缀。使用时非常简单,
只需要在 vc 工程中加入 v8 的 include 目录,链接加入 v8_g.lib 即可。
二、Google v8 入门
2.1 v8 的基本概念
在使用 v8 引擎之前,先来了解一下几个基本概念:句柄(handle),作用域(scope),
上下文环境(可以简单地理解为运行环境)。
Google v8学习笔记
4 / 18
2.1.1 句柄(Handle)
从实质上来说,每一个句柄就是一个指向 v8 对象的指针,所有的 v8 对象必须使用句柄
来操作。这是先决条件,如果一个 v8 对象没有任何句柄与之相关联,那么这个对象很快就
会被垃圾回收器给干掉(句柄跟对象的引用计数有很大关系)。
在 v8.h 中,我们可以看到几个相关的类(模板?):Handle、Local、Persistent,使用时大
致为:
Handle<FunctionTemplate> ft0 = FunctionTemplate::New();
Local<FunctionTemplate> ft1 = Local<FunctionTemplate>::New(FunctionTemplate::New());
Persistent<FunctionTemplate> ft3= Persistent<FunctionTemplate>::New(FunctionTemplate::New());
它们其实没有太大的差别,只是作用域不一样,Handle 和 Local 一样会在 C++的作用域中被
同域的 HandleScope(后面再解释)释放掉。而 Persistent 则相当于是永久性的实例,它所
持有 javascript 对象只有调用 Despose()的时候再会显示释放。
2.1.2 作用域(Scope)
从概念上理解,作用域可以看成是一个句柄的容器,在一个作用域里面可以有很多很多
个句柄(也就是说,一个 scope 里面可以包含很多很多个 v8 引擎相关的对象),句柄指向的
对象是可以一个一个单独地释放的,但是很多时候(真正开始写业务代码的时候),一个一
个地释放句柄过于繁琐,取而代之的是,可以释放一个 scope,那么包含在这个 scope 中的
所有 handle 就都会被统一释放掉了。
Scope 在 v8.h 中有这么几个:HandleScope,Context::Scope。HandleScope 是用来管理
Handle 的,而 Context::Scope 仅仅用来管理 Context 对象。代码像下面这样:
//在此函数中的 Handle 都会被 handleScope 管理
HandleScope handleScope;
//创建一个 js 执行环境 Context
Handle<Context> context = Context::New();
Context::Scope contextScope(context);
//其它代码
一般情况下,函数的开始部分都放一个 HandleScope,这样此函数中的 Handle 就不需要
再理会了释放资源了。而 Context::Scope 仅仅做了:在构造中调用 context->Enter(),而在析
构函数中调用 context->Leave()。
剩余17页未读,继续阅读
邱海龙
- 粉丝: 3
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4