функция обратного вызова в цикле вызывает ошибку Lint

У меня есть цикл, который используется для отправки объекта json нескольким HTTP-клиентам:

for(var i=0; i<clients.length; i++){
    request({
        method: 'POST',
        uri: clients[i].contact,
        json: obj
    },
    function(err, response, body){
        ....
    });     
}

Lint говорит мне следующее: «W083: не создавайте функции внутри цикла». Каков самый чистый способ сделать это? Кроме того, у меня есть некоторые опасения, что этот подход может быть не таким масштабируемым (несмотря на использование nodejs), какой подход будет подходящим для большого количества клиентов?


person Luc    schedule 23.12.2013    source источник


Ответы (1)


Контрольный показатель: работа вне цикла в 20 раз быстрее в моем тесте

// FILE: test.js

// note: 1e9 == 10^9

var begin, end;

// TEST sum function outside 
begin = process.hrtime();
function sum(a, b) {
    return a + b
}

for(var i=0; i< 1e9; i++) {
    sum(i, i);
}

end = process.hrtime(begin);
console.log('functions outside a loop = ', end[0] + end[1] / 1e9, 'seconds')

// TEST sum function within a loop
begin = process.hrtime();

for(var i=0; i< 1e9; i++) {
    (function sum(a, b) {
        return a + b
    })(i, i);
}

end = process.hrtime(begin);

console.log('functions within a loop = ', end[0] + end[1] / 1e9, 'seconds')

Результат:

F:\damphat>node test.js
functions outside a loop =  1.032908888 seconds
functions within a loop =  20.298613718 seconds

В любом случае, я думаю, что вы НЕ должны выводить свой обратный вызов из цикла, потому что это не улучшит производительность для вашего случая. Просто держите свой код чистым и читабельным.

person damphat    schedule 23.12.2013