Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类上函数包装器的性能基准测试与仅构造函数调用和HaveSameMap_Javascript_Performance_Performance Testing_V8 - Fatal编程技术网

Javascript 类上函数包装器的性能基准测试与仅构造函数调用和HaveSameMap

Javascript 类上函数包装器的性能基准测试与仅构造函数调用和HaveSameMap,javascript,performance,performance-testing,v8,Javascript,Performance,Performance Testing,V8,我对代码A和代码B做了一些性能测量,我想知道为什么V8输出会这样 代码A const makePoint = () => { class Point { constructor(x, y) { this.x = x; this.y = y; } } return new Point(1, 2); } const a = makePoint(); const b = makePoint(); console.log(%HaveSame

我对代码A和代码B做了一些性能测量,我想知道为什么V8输出会这样

代码A

const makePoint = () => {
  class Point {
    constructor(x, y) {
      this.x = x;
      this.y = y;
    }
  }

  return new Point(1, 2);
}

const a = makePoint();
const b = makePoint();

console.log(%HaveSameMap(a, b)); // false
第一个问题,究竟为什么havesamap返回false。我相信a和b都有相同的形状和经历相同的过程。那么为什么它们会不同呢

代码B

class Point {
    constructor(x, y) {
      this.x = x;
      this.y = y;
    }
 }
 var a = new Point();
 var b = new Point();
第二个问题-比较这两个系统的性能时间有很大的不同。我只想了解V8的基本类型系统。为什么会这样。调用
newpoint()
vs在
makePoint()函数中返回它。这是怎么回事

更新-测试方法

我正在通过外部软件包进行测试

我的测试代码看起来像

const { performance } = require('perf_hooks');

performance.mark('start');

while (iterations--) {
  makePoint();
}

performance.mark('end');

performance.measure('My Special Benchmark', 'start', 'end');

每次调用
makePoint
时,都会创建一个新的
Point
类。当您直接返回类时,这可能会变得更加明显:

const makePoint = (x, y) => {
  class Point {...};
  return Point;
}
每次计算类文本时都会创建一个类。在类定义之前添加
console.log
时,您可能会看到这种情况。在您的情况下,每次都会对其进行评估


类似地,每次创建一个新类的成本比简单地重复使用同一个类要高。V8必须创建大量内部数据结构以支持快速创建实例。一次使用一个类就可以克服这种非常常见的模式,即你所看到的减速。

你在每次调用
makePoint
时都会创建一个新的
类。当您直接返回类时,这可能会变得更加明显:

const makePoint = (x, y) => {
  class Point {...};
  return Point;
}
每次计算类文本时都会创建一个类。在类定义之前添加
console.log
时,您可能会看到这种情况。在您的情况下,每次都会对其进行评估


类似地,每次创建一个新类的成本比简单地重复使用同一个类要高。V8必须创建大量内部数据结构以支持快速创建实例。一次使用一个类就可以克服这种非常常见的模式,即您所看到的减速。

在您的第一个代码片段中,您不仅在
makePoint
中创建了实例,而且还创建了
类点本身。每次调用
makePoint()
,您都创建了一个新类:

console.log(makePoint().constructor === makePoint().constructor) // false
我想你在找我

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}
const makePoint = () => new Point(1, 2);
const a = makePoint();
const b = makePoint();

console.log(%HaveSameMap(a, b)); // true
console.log(a.constructor == b.constructor, a.constructor == Point); // true, true

在第一个代码片段中,您不仅在
makePoint
中创建了实例,还创建了
类点本身。每次调用
makePoint()
,您都创建了一个新类:

console.log(makePoint().constructor === makePoint().constructor) // false
我想你在找我

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}
const makePoint = () => new Point(1, 2);
const a = makePoint();
const b = makePoint();

console.log(%HaveSameMap(a, b)); // true
console.log(a.constructor == b.constructor, a.constructor == Point); // true, true

你是如何测试性能的?你是不是为了得到一个平均值而反复测试了几百次或几千次?您是否先运行一个,然后运行另一个,但在同一个代码文件中—JIT可以修改您的值。请概述您的性能测试方法。我认为这两个问题应该在0 2堆栈溢出问题中分开,而不是混为一谈。是的。我只是运行了很多次while循环。我会更新同样的问题,作为优秀的程序员,我们应该代码冗余。因此,一个代码和两个问题。哈哈。不管怎样,这是相互关联的。我建议你打破了单一责任规则:)你是如何测试性能的?你是不是为了得到一个平均值而反复测试了几百次或几千次?您是否先运行一个,然后运行另一个,但在同一个代码文件中—JIT可以修改您的值。请概述您的性能测试方法。我认为这两个问题应该在0 2堆栈溢出问题中分开,而不是混为一谈。是的。我只是运行了很多次while循环。我会更新同样的问题,作为优秀的程序员,我们应该代码冗余。因此,一个代码和两个问题。哈哈。不管怎样,它是相互关联的。我建议你打破了单一责任规则:)这就是我要找的。你也可以看看我的这个问题吗?这就是我要找的。你也可以看看我的这个问题吗?这是一个很好的解释,但对形状/哈希图还是更困惑。你肯定更清楚我的第二点+1'ed.这是一个很好的解释,但对形状/哈希映射的理解还是比较混乱的。你肯定更清楚我的第二点+1'ed。