标签: v8

为什么typeof null的值在循环内发生变化?

在Chrome控制台中执行此代码段:

function foo() {
    return typeof null === 'undefined';
}
for(var i = 0; i < 1000; i++) console.log(foo());
Run Code Online (Sandbox Code Playgroud)

应打印1000次false,但在某些机器上将打印false多次迭代,然后true用于其余部分.

在此输入图像描述

为什么会这样?这只是一个错误吗?

javascript v8

109
推荐指数
3
解决办法
7263
查看次数

JavaScript中的对象/数组的性能如何?(专门针对Google V8)

与JavaScript中的数组和对象(尤其是Google V8)相关的性能对于文档来说非常有趣.我在互联网上找不到关于这个主题的综合文章.

我知道一些对象使用类作为它的底层数据结构.如果有很多属性,它有时被视为哈希表?

我也理解,数组有时被视为C++数组(即快速随机索引,慢速删除和调整大小).而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存).并且,有时它们可​​能存储为链接列表(即慢速随机索引,在开头/结尾快速删除/插入)

JavaScript中的数组/对象检索和操作的精确性能是什么?(专门针对Google V8)

更具体地说,它对性能的影响如下:

  • 向Object添加属性
  • 从Object中删除属性
  • 索引对象中的属性
  • 将项添加到数组
  • 从数组中删除项目
  • 索引数组中的项目
  • 调用Array.pop()
  • 调用Array.push()
  • 调用Array.shift()
  • 调用Array.unshift()
  • 调用Array.slice()

任何文章或链接的更多细节也将不胜感激.:)

编辑:我真的很想知道JavaScript数组和对象是如何工作的.此外,在什么情况下 V8引擎"知道""转换"到另一个数据结构?

例如,假设我用...创建一个数组

var arr = [];
arr[10000000] = 20;
arr.push(21);
Run Code Online (Sandbox Code Playgroud)

这里到底发生了什么?

或者......这个怎么样...... ???

var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
    arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
    var item = arr[i].shift();
    //Do something with item...
} …
Run Code Online (Sandbox Code Playgroud)

javascript arrays performance v8 object

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

如何在Node.js中获得microtime?

如何在Node.js中获得最准确的时间戳?

ps我的Node.js版本是0.8.X,node-microtime扩展名对我不起作用(安装时崩溃)

javascript v8 node.js

84
推荐指数
7
解决办法
11万
查看次数

为什么绑定比闭包慢?

之前的一张海报在Javascript中询问了Function.bind vs Closure:如何选择?

并且部分收到了这个答案,这似乎表明bind应该比闭包更快:

范围遍历意味着,当您要获取存在于不同范围内的值(变量,对象)时,会增加额外开销(代码执行速度变慢).

使用bind,您将调用具有现有范围的函数,因此不会进行范围遍历.

两个jsperfs表明bind实际上比闭包慢得多.

这是作为对上述评论发布的

并且,我决定编写自己的jsperf

那么为什么绑定这么慢(铬+ 70%)?

由于它不是更快并且闭包可以起到相同的作用,应该避免绑定吗?

javascript performance v8 node.js

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

node.js支持哪个版本的Javascript

我开始使用Node.js并且我很难弄清楚节点支持哪种版本的JavaScript,这使我很难弄清楚我可以使用哪些功能.这就是我所知道的.

鉴于此,我认为我可以在节点中使用JavaScript 1.5兼容代码.然而,事实证明我可以使用Array.forEach其他构造,尽管根据MDC它直到Javascript 1.6 - ECMA-262,第5版才可用.

我哪里错了?是否有某个文档详细说明了可用的语言功能?

javascript v8 node.js

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

Nodejs:`process.binding`是什么意思?

process.binding('...')通过github上node.js源代码研究了很多次.

任何人都能解释一下这个函数的作用吗?

javascript c++ v8 node.js undocumented-behavior

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

在Mac OS X Lion上,"gem install therubyracer"失败

我很感激gem install therubyracer上班的帮助.这是错误:

$ gem install therubyracer
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems v8

70
推荐指数
7
解决办法
4万
查看次数

如何从C++插件中的"MediaStream"对象读取音频数据

在流血和流泪之后,我终于设法建立了一个Node C++插件,并将一个Web平台标准MediaStream对象推送到其C++方法之一.为了兼容不同的V8和Node.js版本,我使用Native Abstractions for Node.js(nan):

addon.cc

NAN_METHOD(SetStream)
{
    Nan::HandleScope scope;
    v8::Local<v8::Object> mediaStream = info[0]->ToObject();
}
Run Code Online (Sandbox Code Playgroud)

addon.js

setStream(new MediaStream());
Run Code Online (Sandbox Code Playgroud)

对于它的价值,它可以正常工作(即它不会立即删除渲染器进程),并且我可以验证MediaStream对象的存在,例如通过从C++方法返回其构造函数名称:

addon.cc

info.GetReturnValue().Set(mediaStream->GetConstructorName());
Run Code Online (Sandbox Code Playgroud)

当从JavaScript调用时setStream,这将返回字符串MediaStream,因此对象肯定存在.我也可以返回mediaStream对象本身,一切都会正常工作,所以它确实是我需要的对象.

那么,我如何MediaStream在C++中从这个对象中读取音频数据(即音频样本)?作为旁注,实际数据读取(和处理)将在单独的情况下完成std::thread.


赏金更新

我明白如果我自己编译Electron和/或Chromium,这将更容易/可能,但我宁愿不参与维护地狱.

我想知道如果没有这样做是否可能,并且就我的研究而言,我确信我需要做两件事:

  1. 我相信blink public的相关头文件应该足够了
  2. 铬/闪烁库文件(?),用于解析外部符号,类似于node.dylib文件

另外,正如我所说,我相信我可以自己编译chrome/blink然后我会有这个lib文件,但这对于Electron来说是一个维护地狱.考虑到这一点,我相信这个问题最终归结为C++链接问题.有什么其他方法可以做我正在寻找的东西吗?

编辑

在我的情况下,ScriptProcessorNode不是一个选项,因为它的性能使它在生产中几乎无法使用.这将需要在ui /主线程上处理音频样本,这绝对是疯狂的.

javascript c++ v8 blink electron

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

v8 const,let和var的JavaScript性能影响?

无论功能差异如何,使用新关键字"let"和"const"对"var"的性能有任何广义或特定的影响吗?

运行程序后:

function timeit(f, N, S) {
    var start, timeTaken;
    var stats = {min: 1e50, max: 0, N: 0, sum: 0, sqsum: 0};
    var i;
    for (i = 0; i < S; ++i) {
        start = Date.now();
        f(N);
        timeTaken = Date.now() - start;

        stats.min = Math.min(timeTaken, stats.min);
        stats.max = Math.max(timeTaken, stats.max);
        stats.sum += timeTaken;
        stats.sqsum += timeTaken * timeTaken;
        stats.N++
    }

    var mean = stats.sum / stats.N;
    var sqmean = stats.sqsum / stats.N;

    return {min: stats.min, max: stats.max, mean: mean, …
Run Code Online (Sandbox Code Playgroud)

javascript performance v8 const let

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

是什么让这个功能运行得慢得多?

我一直在尝试进行实验,看看函数中的局部变量是否存储在堆栈中.

所以我写了一点性能测试

function test(fn, times){
    var i = times;
    var t = Date.now()
    while(i--){
        fn()
    }
    return Date.now() - t;
} 
ene
function straight(){
    var a = 1
    var b = 2
    var c = 3
    var d = 4
    var e = 5
    a = a * 5
    b = Math.pow(b, 10)
    c = Math.pow(c, 11)
    d = Math.pow(d, 12)
    e = Math.pow(e, 25)
}
function inversed(){
    var a = 1
    var b = 2
    var c = 3 …
Run Code Online (Sandbox Code Playgroud)

javascript performance v8

64
推荐指数
2
解决办法
5497
查看次数