Tag: v8

为什么一个nodejs数组移位/推循环比数组长度87369慢1000倍?

为什么nodejs数组移位/推送操作的速度在数组大小上不是线性的? 在87370有一个戏剧性的膝盖,完全粉碎了系统。 试试这个,首先是q中的87369个元素,然后是87370.(或者,在64位系统上,尝试85983和85984)。对我而言,前者运行时间为0.05秒; 后者在80秒 – 1600倍慢。 (在节点v0.10.29的32位debian linux上观察) q = []; // preload the queue with some data for (i=0; i<87369; i++) q.push({}); // fetch oldest waiting item and push new item for (i=0; i<100000; i++) { q.shift(); q.push({}); if (i%10000 === 0) process.stdout.write("."); } 64位debian linux v0.10.29从85984开始爬行,运行时间为0.06 / 56秒。 节点v0.11.13具有相似的断点,但具有不同的数组大小。

如何在后续的节点运行中重新使用V8 JIT优化?

我打算多次运行node somefile.js 。 据推测,每次我用Node执行这个文件,它都会JIT编译脚本并执行其他优化。 可悲的是:每次执行结束,都会忘记所有的工作。 有没有办法让我从之前的运行中保留V8已经产生的优化,并将它们应用于后续运行?

Node.js / V8中没有实际的浮点types?

我尝试在Node.js通过Buffer存储一个float值 > f = 3.3 3.3 > var buf = new Buffer(32) > buf.writeFloatBE(f); 4 > g = buf.readFloatBE(); 3.299999952316284 然后,我发现readFloatBE()不等于原来的f后,存储的值为g 。 经过进一步调查,这两个存储的缓冲区值g和f是相同的。 > var buf1 = new Buffer(4); buf1.writeFloatBE(f); buf1 <Buffer 40 53 33 33> > var buf2 = new Buffer(4); buf2.writeFloatBE(g); buf2 <Buffer 40 53 33 33> 根据这个Buffer的读写浮点数 ,我们知道writeDoulbeBE应该在这里使用。 > var buf3 = […]

编译32位系统上的node.js

我需要在32位系统上编译node.js以与我已有的代码兼容。 我从nodejs.org的源代码开始编译它。 然后,我开始通过改变common.gypi文件中的第164-166行。 它是: 164 [ 'target_arch=="x64"', { 165 'cflags': [ '-m64' ], 166 'ldflags': [ '-m64' ], 167 }], 现在是: 164 [ 'target_arch=="x64"', { 165 'cflags': [ '-m32' ], 166 'ldflags': [ '-m32' ], 167 }], 当我试图再次,我得到这些错误: ../deps/v8/src/execution.h:259:错误:整数常量对于“长”types来说太大../deps/v8/src/execution.h:260:错误:整型常量太大'long'type ../deps/v8/src/execution.h:259:error:函数调用不能出现在常量expression式中../deps/v8/src/execution.h:260:error:a function调用不能出现在一个常量expression式中 这些错误是指这些行: #ifdef V8_TARGET_ARCH_X64 static const uintptr_t kInterruptLimit = V8_UINT64_C(0xfffffffffffffffe); static const uintptr_t kIllegalLimit = […]

反复从c ++调用node.js函数

我正在尝试设置一个应该能够调用node.js模块一部分的函数的c ++应用程序 虽然我可以find如何创buildnode.js的C ++插件的示例代码,还有一些关于如何从C ++调用V8代码的例子,我没有遇到像从c ++调用node.js函数 我想最好的办法是 设置node.js环境,例如编译所有必要的模块一次 当C ++应用程序需要时,使用参数调用其中一个“可用的”node.js函数 读取并处理函数的返回值 理想情况下,node.js代码和c ++代码在相同的stream程上下文中运行,因此不需要通过某种streamtypes的抽象来编组参数和返回值。 所有提示欢迎! TX 彼得

节点将不会运行Eloquent Javascript的例子,V8将。 这是怎么回事?

下面的函数逐字从Ch复制。 使用Javascript的10个,并且与v8解释器一起运行。 但是,它在Node中以对象weekDay未定义的方式popup。 它在本书提供的沙箱解释器中运行良好。 有人可以解释一下吗? (function(exports) { var names = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; exports.name = function(number) { return names[number]; }; exports.number = function(name) { return names.indexOf(name); }; })(this.weekDay = {}); console.log(weekDay.name(weekDay.number("Saturday")));

使用subprocess时Node.js虚拟内存不断增加

我正在使用spawn-child npm包生成一个shell,在那里我运行一个最初build立在C ++上的二进制文件。 我给Stdin提供了二进制文件,然后这个二进制文件每秒都会发送Stdout。 在节点部分,一旦我开始从二进制接收标准输出,我有一个听众,这将看起来像stdout.on('data', function (data) {}) ,我发送这些数据的SSE通道。 一切工作正常,但主要关注的是我看到当我每次用Stdin打开二进制文件时节点进程的不断的内存增长。 我已经概述了我的代码的外观,是否有一个优雅的方式来控制这个内存的增长,如果是的话,请分享。 var sseChannel = require('sse-channel'), spawnCommand = require('spawn-command'), cmd = 'path to the binary file', globalArray = [], uuid = require('uuid'); module.exports = function(app) { var child = spawnCommand(cmd), privateChannel = new sseChannel({ historySize: 0, cors: { origins: ['*'] }, pingInterval: 15 * 1000, jsonEncode: […]

可以在节点中设置ECMAScript版本吗?

我发现Node使用Chrome的V8 JavaScript引擎。 这里有一些关于ES6支持的信息。 使用Node时,甚至还有一个V8选项的开关: node –v8-options 但是没有一个选项似乎允许selectECMAScript版本。 此外,我在这里发现了几年前Node支持ES3的信息,但后来随着V8的发展,它转向了ES5。 是否可以强制Node使用比5th版更早的ECMAScript版本? 目前使用V8引擎支持ES版本select吗?

有没有人制作节点优化的V8?

是否有服务器端JavaScript的V8的优化版本(主要是节点)? 我问,因为我认为正常的V8是针对Chrome进行优化的,因此客户端JavaScript。

在新的Node.js错误对象的性能命中

在用于检索堆栈跟踪(例如用于logging引擎或内联debugging)的目的中,需要新增一个Error对象的用例。 在第一次创buildError对象时,现代node.js中有没有一个很重的性能问题,或者当开发人员调用<Error> .stack属性时,聪明的V8开发人员就会根据需求展开堆栈。 从我对这些工具的探究中,我认为堆栈跟踪展开不会被执行,直到访问<Error> .stack,这似乎是一个常识性的devise方法。 任何人都可以阐明这一点或build议的方法来validation短的debugging本机V8代码?