Tag: v8

如何使用ES6类运行NodeJS?

我想用: class FOO extends // do stuff constructor() { //do stuff } } module.exports = FOO; nodejs –version输出nodejs –version = v0.12.7 还运行nodejs –harmony script.js不接受类。 我不断收到: class TODORouter extends ^^^^^ SyntaxError: Unexpected reserved word

这与ObjectWrap :: Unwrap的Holder相比

v8::FunctionCallbackInfo类区分This和Holder 。 我知道this是什么在JavaScript中,并假设This反映了这种设置。 但是我对Holder的含义只有一个模糊的概念,对于什么时候应该使用Holder而不是This ,我的想法很less。 特别是在编写一个基于nan的node.js扩展和ObjectWrap一个ObjectWrap ,我应该传递哪一个? 目前node::ObjectWrap文档有使用Holder例子,而目前的Nan::ObjectWrap文档使用This ,所以“只要按照文档中的例子”就Nan::ObjectWrap这个问题。

节点和Chrome中的块范围内的const(V8)

我写了一个nodejs(v4.2.4)应用程序,我遇到了一些奇怪的行为。 function A(number) { this.number = number; } for(var i = 0; i < 3; i++) { const a = new A(i); console.log(a.number); } const b = new A(99); console.log(b.number); 我的直觉,来自Java(和FireFox),是输出应该是 0 1 2 99 但是,Node(和Chrome)给了我 0 0 0 99 我从MSN的调查和了解块范围 ,该var在JavaScript中没有块范围。 进一步来看 , MSN – const将const声明描述为具有块范围: 常量是块范围的,就像使用let语句定义的variables一样。 一个常量的值不能通过重新赋值而改变,并且不能被重新声明。 在这种情况下,我会说Node和Chrome(在这种情况下可能是V8),在块范围中有一些对const的阴暗处理。 但他们也写这个 这个声明创build一个常量,它可以是声明它的函数的全局或局部的。 这是否意味着V8将每个const声明作为一个全局variables,而FireFox创build一个本地variables? 怎么可能这样重要的东西实现如此不同呢?

V8分析:linux-tick-processor不能和d8一起工作

我试图让我的Ubuntu的V8分析和linux-tick-processor工作。 基本上我已经完成了这些步骤: $ git clone git://github.com/v8/v8.git v8 && cd v8 $ make dependencie $ make native // added d8 to $PATH $ d8 –prof primes.js // v8.log is created $ /home/username/v8/tools/linux-tick-processor 但它不工作,因此我得到: Statistical profiling result from v8.log, (0 ticks, 0 unaccounted, 0 excludes). 所以我假设v8.log没有正确创build,因为这个结果是与你给linux-tick-processor的其他文件一起说明的。 我检查了v8.log,它是用一些内容创build的: http://pastebin.com/VLLWMKKM 对我来说,它似乎是正确生成的。 我试图用节点分析,这个工程: $ node –prof primes.js $ /home/username/v8/tools/linux-tick-processor // […]

在node.js绑定中实现inheritance

我正在编写一个C ++库的Node.js绑定。 我可以识别C ++库中的关键对象,我可以将其公开为Node.js(即ObjectWrap的派生类)的类。 我也可以看到这些对象之间的inheritance关系。 如何将ClassA , ClassB , ClassC为node.js类( ObjectWrap衍生物)并操作它们的原型(在V8 C ++代码中),以便ClassB和ClassC是ClassA衍生物?

我如何在本地节点模块中保持零拷贝?

我正在为一个具有零拷贝数据查找function的进程内数据库编写本地节点模块。 我想我的模块也有这个能力。 换句话说,当我从数据库中获取数据时,我想将数据传递给V8,而不需要复制内存或parsing某些内容。 我怎样才能做到这一点? 到目前为止,我所看到的所有方法都是在JSON之间来回切换(在这种情况下浪费很多资源),或者实例化V8数据结构并将数据复制到这些数据结构中。 注意:如果您想知道,零拷贝数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。

如何存储对函数的引用,以便稍后在node.js C ++插件模块中调用它?

这里是我用C ++编写的node.js插件模块,使用node-gyp构build。 当StoreFunction我试图存储一个指向函数的指针,所以我可以稍后使用它 当我尝试稍后通过InvokeFunction调用它时,出现Segmentation错误。 如果我在两个函数(使用cout)中检查指针,我感到困惑,它们是相同的值。 所以我猜测调用两个函数之间调用上下文更改的变化,或者我不明白我指的是什么。 所有(ummmmmm)指针感激地收到我的问题在这里………….. #include <node.h> #include <v8.h> using namespace v8; v8::Persistent<v8::Function> callbackFunction; Handle<Value> StoreFunction(const Arguments& args) { HandleScope scope; callbackFunction = *Local<Function>::Cast(args[0]); return scope.Close(Undefined()); } Handle<Value> InvokeFunction(const Arguments& args) { HandleScope scope; Local<Value> argv[1] = { String::New("Callback from InvokeFunction")}; callbackFunction->Call(Context::GetCurrent()->Global(), 1, argv); return scope.Close(Undefined()); } void init(Handle<Object> target) { NODE_SET_METHOD(target, "StoreFunction", […]

我应该担心清理Node.js中的大对象还是将其留给垃圾收集器?

最近我遇到了一个node.js API的问题,其中我的内存随着每个请求越来越大。 我正在使用他们的只有512MB内存的免费版本在Heroku上托pipe我的服务器。 在周末获得大量stream量之后,我开始从Heroku中获得超出内存的错误,所以我开始在代码中search内存泄漏,但无济于事。 我没有留下任何东西,一切都应该清理干净,坦率地说,我迷路了。 然而,在做了一些研究后,我发现node.js在达到max-old-space-sizevariables时运行垃圾收集器,并且在64位系统上默认为1024MB。 我把它设置为410(我的可用内存的80%),但不知道我是否应该在代码中处理这个问题? 显然这将是理想的升级我的实例,只是正常的默认上限,但现在不是一个选项。 例: // lets assume there is some apiGet function // that calls back with a very very large object with // the following structure: // { // status: "success", // statusCode: 200, // messages: [], // data: { users: [ huge array of users ] } // […]

NodeJs虚拟机 – 保存编译的代码…到磁盘?

从http://nodejs.org/api/vm.html : JavaScript代码可以立即编译并运行,也可以编译,保存并稍后运行 。 […]返回的脚本没有绑定到任何全局对象 。 在每次运行之前,它都会被绑定,只是为了运行。 然后在API中,没有返回任何字节的方法,什么都没有。 只是一个“脚本”对象。 那么,在我礼貌地把这个桌子放在怀里之前,有什么办法可以把编译的脚本保存到磁盘上? 我认为这只是普通的原始二进制数据,也许是一个语法树或其他。

错误:'NewSymbol'不是'v8 :: String'的成员?

由于NodeJS升级到0.11.13,集成了V8引擎3.24.35.22我得到这个错误在一些C + +模块: error: 'NewSymbol' is not a member of 'v8::String' 那么我该怎么做,而不是NewSymbol? 谢谢