@FastSpace said in Таймаут во время выполнения LoadPage data:text/plain:
Уже 100500 раз решение этой проблемы известно.
hello , Can you help me this issue ?
Есть кусок кода который выполняется очень долго.
Суть этого участка кода в проверки уникальности используемого прокси.

Код из кубика nodejs
startP = 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
как это было раньше.