Tag: v8

垃圾收集器在Node.js中

根据谷歌,V8采用了“停止世界,世代,准确,垃圾收集器”高效的垃圾收集。 声明的一部分是V8在执行垃圾回收循环时停止程序执行。 一个显而易见的问题是,如何在暂停程序执行时拥有高效的GC? 我试图find更多关于这个话题的信息,因为我有兴趣知道当你每秒发送几十个请求并触发你的node.js服务器时,GC如何影响响​​应时间。 任何专家的帮助,个人经验或链接将不胜感激 谢谢

为什么node.js不正确地处理setTimeout(func,1.0)?

在处理对时间敏感的项目时,我使用下面的代码来testing可用时间事件的粒度,首先在我的桌面计算机上,然后在我的Linux服务器上作为node.js代码。 Firefox运行产生了可预测的结果,在1ms超时时间内平均达到200帧/秒,表明我有5ms粒度的计时事件。 现在我知道,如果我使用的超时值为0,那么Chrome V8引擎Node.js将不会实际上将超时委派给事件,而是立即处理它。 正如预期的那样,这些数字平均为60,000 fps,在CPU容量上不断处理(并通过顶层validation)。 但是在1ms的超时时间内,数字仍然是每秒3.5-4000个周期,这意味着Node.js不可能考虑到1ms的超时时间,这会造成理论最大值每秒1000个周期。 玩一系列的数字,我得到: 2ms:〜100 fps(真正的超时,表示在Linux上10ms的定时事件粒度) 1.5:相同 1.0001:一样 1.0:3,500 – 4,500 fps 0.99:2,800 – 3,600 fps 0.5:1,100 – 2,800fps 0.0001:1,800-3,300fps 0.0:〜60,000 fps setTimeout(func,0)的行为似乎是可以理解的,因为ECMAScript规范可能不会承诺setTimout将调用委托给实际的OS级中断。 但是任何0 <x <= 1.0的结果显然是荒谬的。 我给了一个明确的延迟时间,n个呼叫在x时延上的理论最短时间应该是(n-1)* x。 V8 / Node.js在干什么? var timer, counter = 0, time = new Date().getTime(); function cycle() { counter++; var curT = new Date().getTime(); if(curT […]

Node.js / v8:如何制作自己的快照来加速启动

我有一个node.js(v0.6.12)应用程序,通过评估一个JavaScript文件startup.js开始。 评估startup.js需要很长时间,如果可能,我想“自定义构build”。 与节点node / deps / v8 / src一起分发的v8源代码目录包含一个几乎可用于执行此操作的SconScript。 在302线上,我们有 LIBRARY_FILES = ''' runtime.js v8natives.js array.js string.js uri.js math.js messages.js apinatives.js date.js regexp.js json.js liveedit-debugger.js mirror-debugger.js debug-debugger.js '''.split() 这些JavaScript文件存在于同一个目录中。 构build过程中的东西显然会对它们进行评估,获取状态的快照,并将其作为字节string保存在node / out / Release / obj / release / snapshot.cc(在Mac OS上)。 这个文件似乎被烘焙到Node中。 启动快照的一些自定义可以通过更改SconScript来实现。 例如,我可以通过改变date.js改变内置的Date.toString的定义。 我甚至可以通过将startup.js添加到库文件列表来添加新的全局variables,内容为global.test = 1 。 但是,我不能把任何JavaScript代码放在startup.js 。 如果它包含Date.toString = 1; 即使代码在节点repl上有效,也会出现错误: Build […]

nodejs v8内存gc分配失败

我试图用一个什么都不做的服务器来configurationnodejs v8内存。 我使用节点memwatch来获取堆差异。 在连接和连接closures之前,我收集堆信息。 我用节点memwatch。 我尝试从客户端200并发连接。 这是连接撕下后的gc轨迹。 谁能帮我理解: 为什么记忆力在​​增加? 在连接断开之后,服务器绝对没有任何作用。 它不应该总是下降,因为垃圾收集? 2.这些分配失败是什么? 我如何真正解释这里的痕迹? 15802 ms: Mark-sweep 8.9 (45.0) -> 8.1 (45.0) MB, 58 ms [allocation failure] [GC in old space forced by flags]. 16144 ms: Mark-sweep 9.2 (45.0) -> 8.4 (45.0) MB, 53 ms [allocation failure] [GC in old space forced by flags]. 16495 ms: […]

如何在google v8(和nodejs)中呈现32位unicode字符

有没有人有一个想法,如何在谷歌V8,同时驱动谷歌浏览器和nodejs的JavaScript虚拟机,呈现unicode“星平面”字符(其CID超出0xffff)? 有趣的是,当我给谷歌浏览器(它标识为11.0.696.71,在Ubuntu 10.4上运行)这样的HTML页面: <script>document.write( "helo" ) document.write( "𡥂 ⿸𠂇子" ); </script> 它将正确地呈现“宽”字符𡥂与“窄”字符一起,但是当我在nodejs(使用console.log() )中尝试相当于我得到一个单一的 (0xfffd,replace字符)字符代替。 我也被告知,无论不可理解的原因,谷歌已决定使用16位宽的数据types来实现字符。 虽然我觉得这很愚蠢,但代理码点的devise恰恰是为了使'星际码点'通过16位挑战的通道'传送'。 不知何故,在chrome 11.0.696.71里面运行的v8似乎使用了这个unicode-foo或者其他的魔术来完成它的工作(我似乎记得几年前,我甚至在静态页面上总是得到盒子)。 是的, node –version报告v0.4.10 ,要弄清楚如何从中获得一个v8的版本号。 更新我做了咖啡脚本中的以下内容: a = String.fromCharCode( 0xd801 ) b = String.fromCharCode( 0xdc00 ) c = a + b console.log a console.log b console.log c console.log String.fromCharCode( 0xd835, 0xdc9c ) 但那只能给我 这背后的思想是,因为处理unicode的JavaScript规范的braindead部分似乎要求? /不彻底禁止? /允许? 使用代理对,那么也许我的源文件编码(utf-8)可能是问题的一部分。 毕竟,在utf-8中有两种编码32位编码点的方法:一种是写出第一个替代品需要的utf-8字节,然后是第二个替代品所需的utf-8字节。 […]

node.js检查dom像标准的JavaScript

如何从html源document创builddocument对象,并使用document.*函数,如node.js中的getElementById ?

Google V8的工作方式与Java虚拟机类似吗?

我知道V8是一个JavaScript引擎,但它的工作方式与Java虚拟机类似吗? 如果它不以相同的方式工作,有什么区别? V8是否直接将JavaScript编译为机器语言?

在Nodejs中,当我console.log一个req对象,引用是什么? 如何确定

在Nodejs中,当我console.log一个req对象时,[Circular]是什么意思? 以下是一个基于nodejs示例的console.log(req)示例。 注意request.socket._readWatcher.socket是一个[Circular]。 这是否意味着它本身? 我怎样才能解除引用? { socket: { bufferSize: 0, fd: 7, type: 'tcp4', allowHalfOpen: true, _readWatcher: { socket: [Circular], callback: [Function: onReadable] }, destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: { socket: [Circular], callback: [Function: onWritable] }, writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.1.1', remotePort: […]

在node.js或V8中获取闭包的所有值

例如,如果我们假设下面的代码: var f = function() { return 'hello world' }; var x = 10; var y = 314; var g = function() { var buf = [], xx = x; while (xx–) buf.append(f() + ' '); return buf.join(''); } 我可以用g.toString()来获得实际的“code”作为g的string。 但是,这并不(显然)得到f和x的closuresg (抱歉,如果我不正确地使用这些条款)。 有什么方法来查询它的闭包含有什么function? 理想情况下,我可以得到一个对象: { 'f' : f, 'x': x } // note that `y` […]

node.js与客户端Javascript(与Chrome / V8相比)有什么性能优势吗?

我目前正在写一个客户端的JavaScript应用程序执行image processing。 它目前执行的一些操作在浏览器中运行非常缓慢(按2-3秒的顺序) 我希望实现的一个解决scheme是让客户端通过websocket从服务器(websocket而不是AJAX,因为它需要显示实时信息等)接收结果信息,并让服务器完成图像操作的繁重工作 Node.js是一个明显的候选人也被写在Javascript中 – 但我的第一个想法是,将不会有性能优势(我的客户端运行在Chrome / V8和Node.js也是V8) – 我正确地认为这是? 或者Chrome的用户界面需要在服务器端不会感觉到的客户端性能损失? (例如,Chrome是否在后台执行了更多的UI工作,以保证node.js服务器不会花费时间进行响应?) 请问node.js是否有任何性能优势,还是最好考虑使用C或Java web socket服务器来完成这项工作?