Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 March 10

DT

Dan The Great 🔥 in NodeUA - JavaScript and Node.js in Ukraine
Heavy
Задача простая, но 1 страница парсится около 4 секунд. Всего около 100 страниц. Это объявления. Соответственно, на всё 400сек. Страницы всегда разные (объявления)
можете заюзать Blubird.map с определенным concurrencyBlubird.map с определенным concurrency
http://bluebirdjs.com/docs/api/promise.map.html
источник

H

Heavy in NodeUA - JavaScript and Node.js in Ukraine
User True
Короче говоря загуглите "скрапинг сайтов nodejs" тут не нужны новые процессы можно Promise.all использовать можно библиотеку async,. Есть и готовые библиотеки для этой цели, если поискать.
Так на одном ядре только будет вертется
источник

H

Heavy in NodeUA - JavaScript and Node.js in Ukraine
Зачем на одном , когда можно на нескольких доступных?
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Heavy
Так на одном ядре только будет вертется
Ну если у вас какие-то  глобальные масшатабы тогда может быть. А так задача простая.
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Я просто парсил в 500 таких "потоков" без проблем.
источник

H

Heavy in NodeUA - JavaScript and Node.js in Ukraine
Ну.. не глобальные. Просто тупо хочется на разных ядрах сделать. Че бы нет? Я не вижу особо ни какой проблемы в этом. Довольно примитивно: IDLE и BUSY. Проверка статуса через setInerval, заодно можно сделать рандомную задержку, чтобы под бан за частое обращение не попасть.
Ах, да. Крутиться будет на raspberry pi 3
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
Heavy
Ну.. не глобальные. Просто тупо хочется на разных ядрах сделать. Че бы нет? Я не вижу особо ни какой проблемы в этом. Довольно примитивно: IDLE и BUSY. Проверка статуса через setInerval, заодно можно сделать рандомную задержку, чтобы под бан за частое обращение не попасть.
Ах, да. Крутиться будет на raspberry pi 3
возьмите вот эту очередь и не парьтесь
https://github.com/sindresorhus/p-queue

вам одного ядра за глаза хватит - не те масштабы, чтобы не хватало)
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
есть штука попроще:
https://github.com/sindresorhus/p-all

примерно то же самое, что и Promise.map() из bluebird
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Карташов
возьмите вот эту очередь и не парьтесь
https://github.com/sindresorhus/p-queue

вам одного ядра за глаза хватит - не те масштабы, чтобы не хватало)
Ее можно взять разве что для создания мемори лика. В условиях малинки это вообще мимо.
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
массив из 100 ссылок - это мемори лик?)
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Ее можно взять разве что для создания мемори лика. В условиях малинки это вообще мимо.
никто ж не говорит, что надо эти 100 ссылок одновременно на парсинг запускать. на то она и очередь, чтобы дозированно всё это делать
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Карташов
массив из 100 ссылок - это мемори лик?)
Во-первых, все дело в том, что там не будет массива из ссылок. Там будет массив из функций, возвращающих промисы.
Во-вторых, если этот массив будет пополняться быстрее чем обработчик будет парсить, то получается мемори лик.

Если внимательно изучить issue-зы, то там можно найти это
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Во-первых, все дело в том, что там не будет массива из ссылок. Там будет массив из функций, возвращающих промисы.
Во-вторых, если этот массив будет пополняться быстрее чем обработчик будет парсить, то получается мемори лик.

Если внимательно изучить issue-зы, то там можно найти это
ну если использовать очередь как очередь и добавлять в неё ссылки/async-await-функции по мере их поступления, то никаких ликов не будет. но для этого надо чуть-чуть подумать, да)
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Для того, чтобы не было ликов, нужен т.н. backpressure. Те модули, которые вы указали используют внутри себя eventemitter3, в котором backpressure отродясь не было.
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Для того, чтобы не было ликов, нужен т.н. backpressure. Те модули, которые вы указали используют внутри себя eventemitter3, в котором backpressure отродясь не было.
при чём здесь вообще backpressure? просто в конце выполнения таски добавляйте в очередь следующую по списку ссылку - это если компонент очередь не эмитит соответствующего события. а если эмитит, то просто подписываемся, слушаем, когда очередная таска в очереди закончена и также добавляем в очередь следующую ссылку
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
было бы желание правильно написать и потестить) но это подумать надо)
источник

АК

Алексей Карташов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Для того, чтобы не было ликов, нужен т.н. backpressure. Те модули, которые вы указали используют внутри себя eventemitter3, в котором backpressure отродясь не было.
ну и вот чтобы не быть голословным, накидал тут для примера. в любой момент времени выполняться будет не больше concurrency и в самой очереди функций будет не больше concurrency. на скорую руку, но суть, думаю, понятна:

const LINKS = [/* ... */];

const concurrency = 5;
const queue = new Queue({ concurrency });

async function task(link) {
 // const res = await got(link);
 // await saveResult(link, res);
 await delay(1000);
}

let LAST_IDX = 0;

const runTask = async () => {
 const link = LINKS[LAST_IDX];
 if (!link) return;

 LAST_IDX += 1;
 await task(link);

 queue.add(() => runTask());
};

for (let idx = 0; idx < concurrency; idx++) {
 queue.add(() => runTask());
}
источник
2020 March 11

D

Danylo in NodeUA - JavaScript and Node.js in Ukraine
Вопрос: будут ли какие либо обновления в связи с коронавирусом 👑 (карантин на массовые мероприятия). Или все по плану?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Danylo
Вопрос: будут ли какие либо обновления в связи с коронавирусом 👑 (карантин на массовые мероприятия). Или все по плану?
Все по плану, у нас группы меньше запрещенного
источник