标签: v8

使用谷歌v8预处理器的示例

我需要解析JavaScript代码并获取AST元素树.我正在尝试使用Google V8 JavaScript引擎.有人试过Google V8预分析器吗?任何代码示例?或者引用采用Google V8预处理器的开源项目?还有nayone有经验起诉预先解析的数据来实现AST吗?

javascript v8

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

V8垃圾收集免费内存吗?

我正在阅读V8文档,它说垃圾收集器"回收"内存.

我的问题是它"回收"要在其自己的堆中使用的内存还是将其释放?

提前致谢.

javascript garbage-collection google-chrome v8 node.js

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

V8 javascript:chrome vs node.js - 'this'上下文中的差异

看看下面的代码:

var pocket = {
        cash: 1000,
        showCash: function() {
                return this.cash;
        }
};

var thomas = {
        name: "Thomas",
        work: function() {
                console.log('I don\'t want to, but I have to... work!');
        },
        cash: 5000
};

var bird = {
        fly: function() {
                console.log('I\'m flying!');
        }
};

console.log(pocket.showCash());

thomas.showCash = pocket.showCash;
console.log(thomas.showCash());

bird.showCash = pocket.showCash;
console.log(bird.showCash());

var cash = 20;
var showCashFun = pocket.showCash;
console.log(showCashFun());
Run Code Online (Sandbox Code Playgroud)

代码非常简单,并显示引擎如何解释 this关键字.当我在chrome控制台中运行它时,我得到以下输出:

1000
5000
undefined
20
Run Code Online (Sandbox Code Playgroud)

那没关系 - 我理解这一切.但是当我在node.js控制台中运行它时,我得到:

1000
5000
undefined
undefined
Run Code Online (Sandbox Code Playgroud)

chrome和node.js都使用v8.怎么会有这样的差异? …

javascript google-chrome v8 this node.js

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

V8:致命错误:CHECK(V8 :: ArrayBufferAllocator()!= NULL)失败

当我尝试用V8 运行一些JS代码(这个 + 这个)时我得到了这个错误(从两个弱点之前尝试过主,3.23.17,3.24.40,3.25.5; 3.23.0由于API不再起作用变化):

#
# Fatal error in ..\..\src\runtime.cc, line 785
# CHECK(V8::ArrayBufferAllocator() != NULL) failed
#
Run Code Online (Sandbox Code Playgroud)

许多其他JS代码已经有效,所以我想知道问题是什么.

它是在Win8上使用x64构建的.V8的构建正如官方文档中所述(使用gyp + MSVC 2012).我认为没有问题,因为它已经与大多数其他JS代码一起运行良好.

我认为V8本身可能存在问题,但不确定......

我也在这里的邮件列表上询问.


一些C++代码,但我不认为它有问题,因为它与其他JS代码一起工作正常:

#include <string>
#include <assert.h>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <boost/noncopyable.hpp>
#include <v8.h>


// Create a new isolate (completely isolated JS VM).
struct V8Isolate : boost::noncopyable {
    v8::Isolate* isolate;
    V8Isolate() : isolate(v8::Isolate::New()) {}
    ~V8Isolate() { isolate->Dispose(); }
    operator v8::Isolate*() { return isolate; }
    v8::Isolate* operator->() { …
Run Code Online (Sandbox Code Playgroud)

javascript v8

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

将null参数传递给v8回调

我有一个本机插件,它实现了一个接受回调的函数,并调用带有可能错误和结果的回调.

我目前有来自NodeJS文档的以下代码,它直接使用结果调用该回调:

v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(args[0]);
const unsigned callback_argc = 1;
v8::Local<v8::Value> callback_arguments[callback_argc] = { physical_drives };
callback->Call(v8::Context::GetCurrent()->Global(), callback_argc, callback_arguments);
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我想用null第一个参数调用回调:

v8::Local<v8::Value> callback_arguments[callback_argc] = {
    v8::Null()
    physical_drives 
};
Run Code Online (Sandbox Code Playgroud)

这种失败,因为我不能初始化callback_argumentsv8::Null()v8::Undefined()那些函数返回一个v8::Primitive同时callback_arguments包含v8::Value秒.

手动演员既不可能:

v8::Local<v8::Value>::Cast(v8::Null());
Run Code Online (Sandbox Code Playgroud)

null/ undefined值传递给回调的正确方法是什么?

v8 node.js

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

如何在iojs中获取模板字符串的原始版本

是否有可能在iojs中获取模板字符串的原始版本?

var s = `foo${1+1}bar`
console.log(s); // foo2bar
Run Code Online (Sandbox Code Playgroud)

在前面的例子中,我想得到字符串: foo${1+1}bar

edit1:我需要检测一个模板字符串是否依赖于它的上下文if if只是一个可以包含CR和LF的'常量'字符串

v8 node.js ecmascript-6

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

多个无限循环

给出这段代码时:

while(true){
 ...
}
Run Code Online (Sandbox Code Playgroud)

可以异步执行多少次?

我已经写了这个来测试以及它如何与Google的JavaScript V8引擎交互,并且一次只有一个while循环处于活动状态.

var cycles = 0;
var counter = new Date();
var OpsStore = [];
var threads = [];

for(var i = 0; i < 10; i++){
  setTimeout(newThread(i),0);
}
function renew(){
    if (secondPassed(counter, new Date())){
        counter = new Date();
        Ops();
    }
    cycles++;
}

function newThread(id){
    threads.push({id: id, active: true});
    return function(){
        while(true){
            console.log(id);
            threads[id].active = true;
            renew();
        }
    }
}

function Ops(){
    OpsStore.push(cycles);
    console.log(cycles, ' avg: ', getAvgOps());
    console.log(threads);
    cycles = 0;
    for(var …
Run Code Online (Sandbox Code Playgroud)

javascript v8 node.js

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

为什么node.js运行时比Google Chrome控制台慢

我们知道Chrome和node.js运行在相同的V8 javascript引擎上.我的理解:

  • Chrome应该很慢,它不仅可以处理内部执行,还可以执行额外的UI工作
  • node.js应该很快,它没有额外的UI工作

所以,比较node.js的V8 javascript的简单速度测试

node.js上的速度测试

使用Chrome的V8

Chrome上的速度测试

为什么node.js比Chrome慢?

顺便说一句,这是代码:

function speedTest(){
    console.time("loop");
    for (var i = 0; i < 1000000; i += 1){
        // Do nothing
    }
    console.timeEnd("loop");
}
Run Code Online (Sandbox Code Playgroud)

javascript performance google-chrome v8 node.js

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

使用Chrome devTools和Inspector API嵌入V8引擎调试

我尝试在嵌入v8引擎的应用程序中添加检查器。

我所有的尝试都失败了,所以我尝试着看一下node.js的实现:它很繁重,所以我从v8源代码切换到了inspector-test和d8。但是我没有找到如何将其连接到chrome :(

因此,在继续开发之前,我将要在chrome和可调试应用程序(例如d8或v8_shell)之间建立调试连接,以分析其工作方式。

我的问题:如何将“ inspector-test或d8或v8_shell”连接到同一台计算机上的chrome:// inspect /#devices。

谢谢你的帮助

javascript google-chrome v8 inspector

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

JS事件循环混淆

我是JS事件循环的新手,我想知道是否有人可以通过js引擎如何运行这个简单的步骤:

function start(){
  setTimeout(function(){
    console.log("Timeout")
  }, 0)
  setImmediate(function(){
    console.log("Immediate")
  })
  process.nextTick(function(){
    console.log("next tick")
  })
}
Run Code Online (Sandbox Code Playgroud)

结果是:

next tick
Timeout
Immediate
Run Code Online (Sandbox Code Playgroud)

我想当JS引擎运行时,

  1. 它解析脚本,设置Timer,设置Immediate,设置nextTick队列,然后进入POLL阶段,检查是否排队等待(在这种情况下没有)
  2. 在进入CHECK阶段之前,它运行nextTick队列,打印"next tick".
  3. 移至CHECK阶段,立即运行队列,打印"立即"
  4. 循环回到TIMER阶段,打印"Timeout"

我的困惑是为什么setTimeout在立即之前打印出来?

PS,

将Timeout延迟设置为0到3或更多后,顺序为:

next tick
Immediate
Timeout
Run Code Online (Sandbox Code Playgroud)

但这仍然无法解释为什么以前的订单JS事件循环运行.

我想知道我错过了什么?

javascript v8 event-loop

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