Потребление памяти функциями bind и arrow несовместимо с теорией - PullRequest
0 голосов
/ 22 февраля 2019

в классе es6 ,, чтобы связать это (для обработчика события реакции) ,

использовать bind так:

class BindFn {
    constructor() {
        this.fn = this.fn.bind(this);
    }
    fn() {}
}

или использовать arrow function следующим образом:

class ArrowFn {
    fn = () => {}
}

, поскольку bind реализован следующим образом:

const bind = function(scope) {
    const fn = this;
    return function(...args) {
        return fn.apply(this, args);
    };
};

, поэтому при создании нескольких экземпляров использование bind будет повторно использовать ссылку в прототипе. И использование arrow function создаст новую функцию без использованияссылка.

И я пишу html для проверки, первое использование BindFn выполнить десять раз, каждое время записи и максимум jsHeap в производительности Chrome.А потом ArrowFn.Наконец, я получил это:

use bind:  spend time: 527.2  maxHeap: 173.4M
use arrow: spend time: 1081.2 maxHeap: 174.8M

использование памяти аналогично, я думаю, использование bind сильно уменьшится, почему?

мой HTML-код тела:

class BindFn {
    constructor() {
        this.fn = this.fn.bind(this);
    }
    fn() {
        const str = 'sdffsdfsdf'.repeat(999999);
        return str
    }
}
class ArrowFn {
    fn = () => {
        const str = 'sdffsdfsdf'.repeat(999999);
        return str;
    };
}
const objList = [];
let startTime = new Date();
for (let i = 0; i < 999999; i++) {
    // objList.push(new BindFn());
    objList.push(new ArrowFn());
}
console.log('spend time:' + (new Date() - startTime));
...