LINUX.ORG.RU

История изменений

Исправление fernandos, (текущая версия) :

➜ hyperfine "node func.js" "node c.js"
Benchmark 1: node func.js
  Time (mean ± σ):      1.263 s ±  0.008 s    [User: 1.258 s, System: 0.006 s]
  Range (min … max):    1.247 s …  1.280 s    10 runs
 
Benchmark 2: node c.js
  Time (mean ± σ):      1.331 s ±  0.007 s    [User: 1.324 s, System: 0.005 s]
  Range (min … max):    1.324 s …  1.344 s    10 runs
 
Summary
  'node func.js' ran
    1.05 ± 0.01 times faster than 'node c.js'
➜ cat func.js
let obj = {a: 10};
 
const hasF = function(object, key) {
    return Object.prototype.hasOwnProperty.call(object, key);
}
for (let i = 0; i < 10 ** 8; i++) {
    hasF(obj, 'a');
    hasF(obj, 'b');
}
➜ cat c.js
let obj = {a: 10};
 
for (let i = 0; i < 10 ** 8; i++) {
    obj.hasOwnProperty('a');
    obj.hasOwnProperty('b');
}

Я даже два раза прогонял, те же 1.05.

Отличие функции от непосредственного вызова Object.prototype.hasOwnProperty.call в районе погрешности. (было бы странно, если бы было иначе).

Исходная версия fernandos, :

➜ hyperfine "node func.js" "node c.js"
Benchmark 1: node func.js
  Time (mean ± σ):      1.263 s ±  0.008 s    [User: 1.258 s, System: 0.006 s]
  Range (min … max):    1.247 s …  1.280 s    10 runs
 
Benchmark 2: node c.js
  Time (mean ± σ):      1.331 s ±  0.007 s    [User: 1.324 s, System: 0.005 s]
  Range (min … max):    1.324 s …  1.344 s    10 runs
 
Summary
  'node func.js' ran
    1.05 ± 0.01 times faster than 'node c.js'
➜ cat func.js
let obj = {a: 10};
 
const hasF = function(object, key) {
    return Object.prototype.hasOwnProperty.call(object, key);
}
for (let i = 0; i < 10 ** 8; i++) {
    hasF(obj, 'a');
    hasF(obj, 'b');
}
➜ cat c.js
let obj = {a: 10};
 
for (let i = 0; i < 10 ** 8; i++) {
    obj.hasOwnProperty('a');
    obj.hasOwnProperty('b');
}

Я даже два раза прогонял, те же 1.05.