标签: embedded-v8

v8 :: Isolate和v8 :: Context之间究竟有什么区别?

V8中这些对象之间有什么区别/连接?上下文"属于"Isolate,反之亦然?

我知道单个Isolate一次只能被一个线程访问(这就是我猜的v8 :: Locker的用途?).

我查看了文档,但我似乎无法掌握这些概念 - 任何帮助都表示赞赏!

v8 embedded-v8

39
推荐指数
2
解决办法
1万
查看次数

使用参数从c ++调用v8 javascript函数

我正在使用c ++和v8,并遇到了以下挑战:我希望能够使用v8在javascript中定义一个函数,然后通过c ++调用该函数.另外,我希望能够从c ++将参数传递给javascript函数.我认为以下示例源代码最能解释它.检查示例代码的末尾,看看我想要完成什么.

#include <v8.h>
#include <iostream>
#include <string>
#include <array>

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();
    Context::Scope context_scope(context);
    Handle<String> source;
    Handle<Script> script;
    Handle<Value> result;

    // Create a string containing the JavaScript source code.
    source = String::New("function test_function(test_arg) { var match = 0;if(test_arg[0] == test_arg[1]) { match = 1; }");

    // Compile the source code.
    script = Script::Compile(source);

    // …
Run Code Online (Sandbox Code Playgroud)

c++ v8 embedded-v8

29
推荐指数
2
解决办法
2万
查看次数

如何在Java应用程序中嵌入V8?

我正在寻找一种在我的Java应用程序中嵌入Google JavaScript引擎V8的解决方案.

你有一些解决方案吗?

javascript java v8 embedded-v8

28
推荐指数
3
解决办法
2万
查看次数

什么是内部字段数,SetInternalFieldCount用于什么?

我无法理解SetInternalFieldCount()函数的实际功能.在v8文档中,该函数被描述为设置"从此模板生成的对象的内部字段数".这是非常自我解释和无意义的.

v8嵌入器的指南中,他们给出了这个例子

point_templ->SetInternalFieldCount(1); 
Run Code Online (Sandbox Code Playgroud)

并说"这里内部字段计数设置为1,这意味着该对象有一个内部字段,索引为0,指向C++对象."

但究竟什么是内部领域以及设置此值实际上告诉程序的是什么?

c++ v8 embedded-v8

26
推荐指数
1
解决办法
5282
查看次数

使用Google V8进行最快速的Javascript对象序列化

我需要使用1-100的混合类型属性来序列化中等复杂的对象.

最初使用JSON,然后我切换到BSON,速度稍快.

编码10000个样本对象

JSON:        1807mS
BSON:        1687mS
MessagePack: 2644mS (JS, modified for BinaryF)
Run Code Online (Sandbox Code Playgroud)

我想要一个数量级的增加; 它对系统的其他部分产生了非常糟糕的影响.

转向BSON的部分动机是对二进制数据进行编码的要求,因此JSON(现在)不适合.而且因为它只是跳过对象中存在的二进制数据,所以它们在那些基准测试中"作弊".

描述了BSON性能热点

  • (不可避免?)将UTF16 V8 JS字符串转换为UTF8.
  • BSON库中的malloc和字符串操作

BSON编码器基于Mongo BSON库.

本机V8二进制序列化器可能很棒,但由于JSON是原生的并且可以快速序列化,我担心即使这可能无法提供答案.也许我最好的办法是优化BSON库中的数据,或者编写自己的数据,以便更有效地将字符串拉出V8.一种策略可能是为BSON添加UTF16支持.

所以我在这里提出想法,也许是一个健全检查.

编辑

添加了MessagePack基准测试.这是从原始JS修改为使用BinaryF.

C++ MessagePack库可以提供进一步的改进,我可以单独对其进行基准测试,以直接与BSON库进行比较.

javascript serialization v8 bson embedded-v8

15
推荐指数
2
解决办法
1万
查看次数

如何使用Chromium和Delphi 6在网页中向Javascript公开"本机函数"?

Delphi Chromium Embedded的帮助下,我已成功将Chromium嵌入到我的Delphi 6项目中.现在我希望能够执行Javascript代码并将结果返回给我的主机Delphi应用程序.我当前的方法是调用ExecuteJavascript()并使用Javascript调用将其结果写入的DOM元素,并从Delphi中的TTimer方法中轮询该元素以检索结果.但是,我读到使用本机函数和V8扩展将Javascript调用"回调"到我的Delphi代码中,作为接收结果的方式:

http://magpcss.org/ceforum/viewtopic.php?f=7&t=180

我想尝试这个,我也想知道如何将基于Delphi的事件监听器附加到网页中的DOM元素(onblur,onmousedown等).我正在寻找一些样本,如果有人知道在哪里找到它们会告诉我如何做这两件事.

javascript delphi chromium embedded-v8

15
推荐指数
1
解决办法
2万
查看次数

v8 :: Persistent MarkIndependent,这个方法究竟做了什么?

以下是v8代码评论,我不太明白解释.

/**
 * Marks the reference to this object independent. Garbage collector
 * is free to ignore any object groups containing this object.
 * Weak callback for an independent handle should not
 * assume that it will be preceded by a global GC prologue callback
 * or followed by a global GC epilogue callback.
 */
inline void MarkIndependent();
inline void MarkIndependent(Isolate* isolate);
Run Code Online (Sandbox Code Playgroud)

c++ v8 embedded-v8

12
推荐指数
1
解决办法
543
查看次数

在Ubuntu上安装PHPv8js

我在Ubuntu上安装phpv8js时遇到了一些麻烦.

我已经确定我安装了最新版本的libv8,并且拥有所需的PHP版本,但是使用PECL安装失败.

这是输出:

libtool: compile:  g++ -I. -I/tmp/pear/temp/v8js -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootFyySRS/v8js-0.1.2/include -I/tmp/pear/temp/pear-build-rootFyySRS/v8js-0.1.2/main -I/tmp/pear/temp/v8js -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/v8js/v8js.cc  -fPIC -DPIC -o .libs/v8js.o
/tmp/pear/temp/v8js/v8js.cc:100: warning: deprecated conversion from string constant to ‘char*’
/tmp/pear/temp/v8js/v8js.cc:100: warning: deprecated conversion from string constant to ‘char*’
/tmp/pear/temp/v8js/v8js.cc:100: warning: deprecated conversion from string constant to ‘char*’
/tmp/pear/temp/v8js/v8js.cc: In function ‘void zim_V8Js___construct(int, zval*, zval**, zval*, int)’:
/tmp/pear/temp/v8js/v8js.cc:569: warning: deprecated conversion from string constant to ‘char*’
/tmp/pear/temp/v8js/v8js.cc: In function ‘void zim_V8Js_executeString(int, zval*, zval**, zval*, …
Run Code Online (Sandbox Code Playgroud)

php embedded-v8

9
推荐指数
1
解决办法
1万
查看次数

V8不会清理所有垃圾

我在V8清理垃圾时遇到了麻烦.首先,我的Javascript如下:

var bigstring = "ASD";
for (var b = 0; b < 20; b++) {
    bigstring = bigstring + bigstring;
}
trace("bigstring " + bigstring.length);

function frame() {
    // generate some garbage
    var junkArray = [];
    for (var i = 0; i < 1000; i++) {
        junkArray.push(i + bigstring);
    }
}
Run Code Online (Sandbox Code Playgroud)

从C++开始,我正在运行一个循环:

  • 打电话frame.
  • 收集垃圾: while(!V8::IdleNotification()) {};

预期的结果是每次迭代junkArray都会收集垃圾.毕竟,IdleNotification只有当"V8完成尽可能多的清理"时才返回true (doc).

事实上,垃圾只清理*约.每100次迭代.我错过了一步吗?是junkArray出于某种原因不是立即垃圾frame

*通过比较堆使用前后来确定

javascript v8 embedded-v8

9
推荐指数
1
解决办法
358
查看次数

访问V8引擎的抽象语法树

对于给定的JavaScript代码,是否可以访问v8引擎的AST?我正在使用V8引擎开发JavaScript静态分析器.

javascript interpreter v8 abstract-syntax-tree embedded-v8

8
推荐指数
1
解决办法
3369
查看次数