Tag: v8

V8 / nodejs中的人工性能限制

V8能够使用–max-old-space-size来–max-old-space-size大量内存。 我经常使用节点来处理需要10GB +的任务,这非常棒 – 内存比较便宜,比从磁盘读取/写入要快得多。 然而,当我试图创build非常大的单个数组/地图/对象时,遇到了麻烦。 我结束了这样的错误消息: FATAL ERROR: invalid table size Allocation failed – JavaScript heap out of memory 和这个: RangeError: Invalid array length 在这两种情况下,这并不是说我的电脑无法处理它,或者我的内存已经耗尽 – 这是因为在V8中隐藏了一些隐藏的人为限制。 为了得到范围错误,把它扔到你的terminal: node -e "new Array(5*1000*1000*1000)" 并得到无效的表大小错误: node -e "(new Array(200*1000*1000)).fill(1)" 这些人为限制是众所周知的( 1,2 ),显然是由于V8团队害怕触摸的一些旧的垃圾收集器代码知道将需要大量的工作来解决(见铬缺陷报告 )。 题: 对于熟悉V8和nodejs路线图的人来说 :这些限制是否会被解除? 我们可以等待多久? 请注意,我理解模式像内存使用stream量较低,我知道nodejs和V8不是为“大数据”的东西 – 这个问题不是关于如何优化我的内存使用情况等。 只是对这些人为的限制对V8和nodejs路线图感到好奇。

使用node.js时是否有很好的V8命令行参数参考

我似乎无法find可用于Node.js的各种命令行选项的很好的参考。 我特别感兴趣的是那些控制V8内存使用情况的人。 如–max_new_space_size, – max_old_space_size等 我在哪里可以找出那些是什么意思? 谢谢!

如何将包装的C ++对象传递给Javascriptcallback?

和我解释这一点一样。 我正在尝试使用C ++编写一个Node.js模块,它包装并公开libhdf5中的一些类。 我目前对libhdf5的两个类感兴趣。 第一个是File ,它打开一个hdf5文件。 第二个是Group ,代表该文件中的组。 您从File对象获取组对象。 我写了一些代码,我创build了一个File对象,并试图从中获取一个Group 。 我正在尝试使我的Node.js模块尽可能Javascripty,所以我想使用callback返回组。 所以,我试图编写我的模块,以便它的使用是这样的: var hdf5 = require('hdf5'); var file = new hdf5.File('/tmp/example.h5'); file.getGroup('foobar', function (err, group) { console.log(group); }); 所以,在我的File包装器的C ++代码中,我有一个映射到getGroup函数的函数,它会调用给定的匿名函数,传入任何错误以及新的Group对象包装器。 鉴于这听起来像是什么Node.js文档显示为包装对象的工厂 ,我已经模拟了我的Group代码后的例子。 所以,我有我的Group包装编码,但坚持试图实例化它。 我还不知道如何偏离使用v8 Arguments类的函数参数。 正因为如此,我似乎无法传递我需要的一些参数,我的v8持久化构造函数(因为我从C ++实例化这个,而不是从JS-land)。 请有人看看我的代码为libhdf5,并给我一个指示,如何实现这一目标? 我觉得我快到了,但是我只是想念一些东西。 这里是我的Group包装,突出构造函数: https : //github.com/ryancole/node-hdf5/blob/master/src/h5_group.cc#L57-72 这里是我的File包装,线高亮在哪里我需要通过我的参数,作为参数(或无论是我需要改变这个工作: https : //github.com/ryancole/node- HDF5 /斑点/主/ SRC / h5_file.cc#L110 在此先感谢,并感谢您阅读此墙的文字。 🙂

NodeJS像Python一样的string格式?

在Python中,我可以做到以下几点: name = "bob" print("Hey, %s!" % name) 在JavaScript / .format()有没有类似的东西(或Python的.format() )?

Node.js和碎片

背景 :我来自微软的世界,在这个世界里,我曾经把网站存储在IIS上。 经验教会我每天回收我的应用程序池一次,以消除由于碎片造成的奇怪问题。 回收应用程序池基本上意味着重新启动您的应用程序,而无需重新启动整个IIS。 我还观看了一个演讲,解释了微软如何在.Net 4.5中减less了很多碎片。 现在,我正在将Node.js应用程序部署到生产环境中,并且必须确保它始终完美地工作。 我原本以为使我的应用程序每天重新启动一次。 然后我做了一些研究,以便在Node.js中find关于碎片问题的一些线索。 我发现的唯一的东西是V8中描述GC的文章中的一小段 : 为了确保快速的对象分配,短暂的垃圾收集暂停,“无内存碎片V8”采用了世界末日,准确的垃圾收集器。 这个声明对我来说真的不足以让我放弃构build我的应用程序的重启机制,但另一方面,如果没有问题,我不想做一些工作。 所以我的问题是: 我应该或不应该重新启动我的应用程序,以防止碎片?

为什么Javascript函数`arguments`不是node.js中Array的一个实例?

最近看了很多NodeJS和Javascript代码,看起来参数不是Array的一个实例,但仍然像一个一样,所以人们做的东西像Array.prototype.slice.call(arguments, …)或[].slice.call(arguments) ,它增加了冗长,增加了新手理解等障碍。是否有一个原因,为什么参数不是一个数组的实例,或者这只是一个坏的部分?

自定义node.js插件可以被创build但不能包含

我正在编写一个由C ++与C程序混合的自定义node.js插件。 addon.cc由类似的东西组成 #define BUILDING_NODE_EXTENSION #include <node.h> #include <node_buffer.h> using namespace v8; using namespace node; /* other logic and function… */ Handle<Value> RunCallback(const Arguments& args) { HandleScope scope; Local<Value> buffer1 = args[0]; size_t size = Buffer::Length(buffer1->ToObject()); char* bufferdata = Buffer::Data(buffer1->ToObject()); /* some logic written in C style … */ Local<Function> cb = Local<Function>::Cast(args[1]); const unsigned […]

Node.JS正则expression式引擎在大input时失败

这个问题有点复杂,Google使用并没有什么帮助。 我会尽量只介绍它的相关方面。 我有一个大的文件大致如下格式: 示例input : ABC is a word from one line of this document. It is followed by some random line PQR which happens to be another word. This is just another line I have to fix my regular expression. Here GHI appears in the middle. This may be yet another line. VWX is […]

V8懒惰的堆栈跟踪生成似乎会导致誓言库中的无限循环

我花了一些时间在NodeJStesting套件中debugging一个奇怪的无限循环问题。 它只发生在罕见的情况下,但我可以重现它,当我连接到铬debugging器。 我认为它必须处理V8处理exception中的堆栈跟踪,以及发誓库对AssertionError对象做出的扩展(发誓添加了toString方法)。 我也可能弄错了,所以我想问一下,我对V8的实现的理解是否正确。 这是一个重现错误的最简单的例子: $ git clone https://github.com/flatiron/vows.git $ cd vows && npm install && npm install should $ cat > example.js var should = require('should'); var error = require('./lib/assert/error.js'); try { 'x'.should.be.json; } catch (e) { console.log(e.toString()); } // without debug, it should fail as expected $ node example.js expected 'x' to have […]

为什么这个V8 / Javascript代码执行得如此糟糕?

我一直在寻找一些有趣的编程基准来看看node.js与其他语言相比的performance如何: http ://benchmarksgame.alioth.debian.org/u32/compare.php?lang=node&lang2=php 虽然结果主要是解决algorithm问题,而您通常更喜欢用C或Fortran的变体来解决这个问题,但是对于V8来说,一个testing非常不好: pidigits – 比PHP慢52倍 因为v8在所有其他testing中的performance都比PHP更好,所以我认为在代码方面有些问题,或者是某些特定于V8 / Javascript的实现,使得它的performance非常糟糕。 它是什么? 代码1:V8 // The Computer Language Benchmarks Game // http://shootout.alioth.debian.org // // Contributed by Matthew Wilson // biginteger derived from Tom Wu's jsbn.js var compareTo, multiply, divide, addTo, add, intValue, shiftLeft, nbv; function main($n) { var $i=1, $s="", $d, neg10=nbv(-10), three=nbv(3), ten=nbv(10), g = 1, […]