Tag: v8

在Node.js中,如何检测v8堆的使用情况已接近极限

现在我用: const v8 = require('v8'); let heap = v8.getHeapStatistics(); let usage = 100 / heap.heap_size_limit * heap.used_heap_size; if (usage > 90) { console.log(`V8 heap usage close to the limit (${usage.toFixed()}%)`); } else if (usage > 95) { console.log(`V8 heap usage very close to the limit (${usage.toFixed()}%)`); } 此解决scheme不正确的工作。 当我尝试这个命令:node –max-old-space-size = 100 index.js我的进程由于无法分配内存而下降,当我的脚本计算~56% getHeapStatistics().heap_size_limit is […]

nodejs v8.getHeapStatistics方法

在nodejs v8模块中,有一个名为getHeapStatistics的函数,它返回一个包含有关内存使用情况信息的对象: { total_heap_size: 221540352, total_heap_size_executable: 5242880, total_physical_size: 221540352, total_available_size: 1286110104, used_heap_size: 189179192, heap_size_limit: 1501560832, malloced_memory: 16384, peak_malloced_memory: 1325112, does_zap_garbage: 0 } 每个领域的含义是什么?

node.js / v8将大文件读入内存

题 如何在node.js下读取大于1.1 GB的文件到内存中? 例 我试图在node.js下使用topojson将> 1.1 GB的GeoJSON文件转换为TopoJSON格式。 $ topojson -o outfile.json larger_than_one_point_one_GB_input_file.json (以上已经为文件高达517 MB) 结果如下错误 buffer.js:242 this.parent = new SlowBuffer(this.length); ^ RangeError: length > kMaxLength at new Buffer (buffer.js:242:21) at Object.fs.readFileSync (fs.js:200:14) at /usr/local/share/npm/lib/node_modules/topojson/bin/topojson:61:26 at Array.forEach (native) at Object.<anonymous> (/usr/local/share/npm/lib/node_modules/topojson/bin/topojson:60:8) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10) […]

获取Node.js事件循环中(活动)定时器的数量

有没有办法在Node.js中调用来确定事件循环队列中的定时器的数量? 我有一个有很多超时的图书馆,而不是使用某种内部簿记系统来跟踪他们,如果我可以问V8或Libuv或其他什么,有多less个定时器,那将是很好的。 这可能吗?

节点版本8中的asynchronous/等待性能指导原则

async/await可用于节点版本8.本地代码首次在nodejs中是线性的。 那很好。 早些时候有很多文章声称,在v8 javascript引擎中, try/catch块的function没有被优化。 现在, async/await需要try/catch块来处理错误。 那么,作为一名开发人员,为了保持相同的性能,还需要做些什么呢?

什么是Node.JS的getHiddenValue和setHiddenValue函数,它包装了V8的GetPrivate和SetPrivate?

出于非常复杂的原因,我正在研究更好地理解Node.JS的内部,并且发现了两个不明原因的function。 这些function以及如何访问它们。 process.binding('util').setHiddenValue process.binding('util').getHiddenValue 从他们的本地代码声明中 ,很明显他们包装了以下V8函数: v8::Object::SetPrivate v8::Object::GetPrivate 我也做了一个小片段,说明他们可以做些什么。 'use strict'; var binding = process.binding('util'); var o = {}; binding.setHiddenValue(o, 7, 'testing123'); console.log(binding.getHiddenValue(o, 7)); // returns 'testing123' 但是,我一直无法find这些所谓的“隐藏值”的文档,或者以其他方式确定为什么在Node或V8中需要这些文档。 任何人都可以阐明他们真正的目的吗? 作为参考,这些似乎是您可以用来关联数据的唯一有效值(高于7会崩溃): alpn_buffer_private_symbol: 0, arrow_message_private_symbol: 1, contextify_context_private_symbol: 2, contextify_global_private_symbol: 3, decorated_private_symbol: 4, npn_buffer_private_symbol: 5, processed_private_symbol: 6, selected_npn_buffer_private_symbol: 7,

node.js拼接太慢,超过70000个项目

我在node.js中是新手 我试图插入70000项到数组中,然后删除所有这些: var Stopwatch = require("node-stopwatch").Stopwatch; var stopwatch = Stopwatch.create(); var a = [] stopwatch.start(); for (var i = 1 ; i < 70000 ; i++){ a.push((parseInt(Math.random() * 10000)) + "test"); } for (var i = 1 ; i < 70000 ; i++){ a.splice(0,1); } stopwatch.stop(); console.log("End: " + stopwatch.elapsedMilliseconds + " : " + […]

用于C#的类似V8的哈希表?

我正在编程一个公寓和房屋租赁网站。 由于不会有超过10'000个物业出租,把所有物品都存入记忆体是没有问题的。 现在,当用户想要search特定的一个,他可以定义非常多的价格,房间,自动扶梯等filter。 每个属性都有一组非常不同的属性。 一个属性可能具有另一个属性不具有的属性。 所以,在C#中创build一个具有所有属性的类,而仅使用其中一些属性对我来说不是一个好主意。 我决定使用一个字典来代替。 稍后的一些基准testing中,我发现,Dictionary作为一个类访问属性的速度要慢大约40倍。 我也做了一个node.js的基准,它只是用对象作为字典。 这是非常有趣的,因为node.js中完全相同的程序比使用本地类的C#示例执行得更好。 其实我得到了以下结果: C#字典:〜820ms C#类:〜26ms Node.js对象:〜24ms 每个基准都按照相同的标准search1000万个物体。 我知道,由于Google的V8引擎,Node.js版本非常快。 你知道是否有一个C#类使用与V8引擎类似的技术,并获得几乎相同的性能? C#字典基准 namespace Test { class Program { static void Main(string[] args) { PropertyList p = new PropertyList(); long startTime = DateTime.Now.Ticks; for (int i = 0; i < 100; i++) { p.Search(); } Console.WriteLine((DateTime.Now.Ticks – startTime) / 10000); […]

错误的JavaScript V8的正则expression式引擎时匹配的开始行?

我有一个非常漂亮的工具, 下划线 ,这是在打印出帮助/使用信息时得到最奇怪的行为。 在usage()函数中,我这样做来缩进文本块(例如,选项): str.replace(/^/, " "); 除了非常明显之外,这个正则expression式直接来自TJ Hollowaychuk的commander.js代码。 正则expression式是正确的。 然而,我在我的使用文本中间插入了一些bizzare空格。 喜欢这个: 命令: … 值检索对象属性的所有值。 扩展&ltobject>覆盖input数据中的属性。 默认值&ltobject>填写input数据中缺less的属性。 any&ltexp>如果input中的任何值使expression式为真,则返回“true”。 expression式参数:(值,键,列表) all&ltexp>如果input中的所有值都使expression式为true,则返回“true”。 expression式参数:(值,键,列表) isObject如果input数据是具有命名属性的对象,则返回“true” isArray如果input数据是数组,则返回“true” isString如果input数据是string,则返回“true” … 99%的机会,这是V8中的一个bug。 任何人都知道为什么会发生这种情况,或者最简单的解决办法是什么? 是的,事实certificate这是一个V8的错误,1748是确切的。 以下是我在该工具中使用的解决方法 : str.replace(/(^|\n), "$1 ");

Getter中的asynchronous函数在callback中返回

我想定义一个只读对象属性,它asynchronous获取一个值,然后使用新的EcmaScript 5 getters返回它。 但是,即使下面的示例代码中的magicValue明确永远不会定义,属性总是返回undefined。 另外,当我只是return 'xxx'; 打印的值仍然是undefined 。 它只在我returncallback函数之外时才起作用。 看起来不pipe是否调用myAsyncFunction的callback,立即执行return 。 我不确定这是V8中的错误,还是滥用JavaScript的获取者。 我可以得到这个工作吗? 我想,因为我现在可以使用getter和setter,所以我将使用getters / setter来读写属性和常规函数来完成某些任务。 var User = function (id) { this.id = id; }; Object.defineProperty(User.prototype, 'magic', { get : function () { myAsyncFunction(function (magicValue) { return magicValue; }); } }); var u = new User(5); console.log(u.magic); 打印undefined 。