2013-12-23 2 views
0

У меня есть цикл, который используется для отправки объект JSON к нескольким HTTP клиента:функция обратного вызова в цикле вызывает ошибку LINT

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

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

ответ

0

Benchmark: функция вне цикла 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 

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

Смежные вопросы