@6849386649
Нажмите Ctrl+F для вызова поиска действий.
Прикрепите, пожалуйста, проект, в котором возникает проблема, сюда или в ЛС форума.
Долгое время работы блока nodejs
-
Есть кусок кода который выполняется очень долго.
Суть этого участка кода в проверки уникальности используемого прокси.

Код из кубика nodejsstartP = new Date().getTime(); let proxies = JSON.parse([[PROXY_CONTENT]]); endP = new Date().getTime(); console.log(`parse: ${endP - startP}ms`); //console.log(proxies); function filterByIp(arr, ip) { return arr.filter(function(item, i, arr) { return (item.real_ip == ip); }); }; function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; //Максимум не включается, минимум включается } function getProxy(random = false){ let used_ips = [[USED_IPS]]; let proxy = false; if(random){ start = new Date().getTime(); if(used_ips.length){ used_ips.forEach(function(item, i, arr) { //console.log(item); old_proxy = filterByIp(proxies, item.real_ip); if(old_proxy.length){ proxy = old_proxy[0]; return; } }) } end = new Date().getTime(); console.log(`used_ips: ${end - start}ms`); } if(!proxy) { start = new Date().getTime(); let proxyIndex = getRandomInt(0, proxies.length); //console.log('proxyIndex '+proxyIndex); proxy = proxies[proxyIndex]; end = new Date().getTime(); console.log(`random proxy: ${end - start}ms`); } let block_ips = [[BLOCK_IPS]]; if(block_ips.length){ start = new Date().getTime(); let block_ip_check = false; block_ips.forEach(function(item, i, arr) { //console.log(item); if(item.ip == proxy.real_ip){ block_ip_check = true; return; } }) end = new Date().getTime(); console.log(`block_ips: ${end - start}ms`); console.log('block_ip_check '+block_ip_check); if(block_ip_check){ return getProxy(false) } } let all_used_ips = [[ALL_USED_IPS]]; if(all_used_ips.length){ start = new Date().getTime(); let all_used_check = false; all_used_ips.forEach(function(item, i, arr) { //console.log(item); if(item.real_ip == proxy.real_ip){ all_used_check = true; return; } }) end = new Date().getTime(); console.log(`all_used_ips: ${end - start}ms`); console.log('all_used_check '+all_used_check); if(all_used_check){ return getProxy(false) } } return proxy; } start1 = new Date().getTime(); [[PROXY_OBJECT]] = getProxy(true); end1 = new Date().getTime(); console.log(`all: ${end1 - start1}ms`); console.log('getProxy'); [[BLOCK_IPS]] = [[ALL_USED_IPS]] = [[USED_IPS]] = '';Вообщем что мы видим в итоге в консоле
[394756266] [15:39:21] Поток №1 : parse: 18ms [394756266] [15:39:22] Поток №1 : used_ips: 2ms [394756266] [15:39:22] Поток №1 : block_ips: 0ms [394756266] [15:39:22] Поток №1 : block_ip_check false [394756266] [15:39:22] Поток №1 : all_used_ips: 1ms [394756266] [15:39:22] Поток №1 : all_used_check true [394756266] [15:39:22] Поток №1 : random proxy: 0ms [394756266] [15:39:22] Поток №1 : block_ips: 0ms [394756266] [15:39:22] Поток №1 : block_ip_check false [394756266] [15:39:22] Поток №1 : all_used_ips: 0ms [394756266] [15:39:22] Поток №1 : all_used_check false [394756266] [15:39:22] Поток №1 : all: 3ms [394756266] [15:39:22] Поток №1 : getProxy [465490379] [15:39:22] Поток №1 : 33043 ms [546491848] [15:39:22] Поток №1 : Замер времениТаким образом получается что все замеры в самом блоке это all + parse = 21 мс
А реальное время работы состовляет 33043 мсЯ понимаю что там огромные массивы данных сравниваются для вычисления уникального ip но почему такая большая разница во времени внутри блока и за его пределами.
-
Только сейчас удалось решить эти проблему
Как понял проблема была из за того что у меня данные получались из базы в выше стоящем блоке а их там было не сколько десятков тысяч.
И вот при предаче их в блок где происходили проверки, и возникали все эти тормаза.
Как только я объединил все блоки получения данных из базы с блоком проверок, то время которое не обходимо сразу же стало в рамках разумного сейча где то 4-6 сек, а не 30-60
как это было раньше.