Не так чтобы это жизненно важный вопрос, скорее больше из любопытства. Есть некоторая функция, которая выполняется очень много раз в секунду как синхронно(for) так и асинхронно(requestAnimationFrame), внутри нее как-то обрабатываются некоторые данные. Собственно вопрос, что будет быстрее подмена this через bind и передача данных через this, обычное замыкание или bind(null, ...данные).
Я пробовал писать примитивный тест для этого, в хроме побеждают замыкания(что для меня странно). Первый пробег выполняется медленно и с замыканиями и с bind, но дальнейшие итерации замыкания немного выигрывают. Хотя я всегда думал что замыкания должны быть дороже в многоразовой перспективе. Есть те кто "в теме" и понимает почему так и как сделать лучший выбор при написании подобных функций(допустим скорость критична и производительность важнее читаемости..)?
Мой тест:
const context = {sum: 0};
const closured = function () {
context.sum += 1;
};
const binded = function () {
this.sum += 1;
}.bind(context);
const bindNull = function (context) {
context.sum += 1;
}.bind(null, context);
for(let j = 0; j < 4; j++){
console.time('closure');
for (let i = 0; i < 10000; i++) {
closured();
}
console.timeEnd('closure');
console.time('bind');
for (let i = 0; i < 10000; i++) {
binded();
}
console.timeEnd('bind');
console.time('bindNull');
for (let i = 0; i < 10000; i++) {
bindNull();
}
console.timeEnd('bindNull');
}
Результат:
closure: 0.187ms
bind: 0.181ms
bindNull: 0.177ms
closure: 0.066ms
bind: 0.078ms
bindNull: 0.099ms
closure: 0.062ms
bind: 0.077ms
bindNull: 0.110ms
closure: 0.017ms
bind: 0.057ms
bindNull: 0.079ms