[personal profile] pokerfrog

Попробуйте с помощью async исполнить параллельно 5000 задач. Можно даже не пробовать – получится плохо.

Зал подсказывает: надо использовать parallelLimit. А вот хуй. Все равно подавится. Потому что из каждой задачи будет вызываться callback, а из него следующая задача, и снова коллбэк… У вас получится 100500 вложенных вызовов и нода умрет где-то в районе 1300ого. Проверено экспериментально.

Но есть одна штука с винтом. Надо вызов коллбэка обернуть вот так:

process.nextTick (function () { callback(null); }); Тогда коллбэк будет вызван действительно асинхронно, в следующем цикле обработчика событий

Вытянул 100.000 пользователей ЖЖ  из общего рейтинга и плотоядно облизнулся.

Update 1: ан нет, не вытянул. Таки подавился на где-то на середине. Память кончилась. Надо разбираться как нода управляется с памятью

Update 2: я нашел эту подлую тварь, которая жрала память как не в себя. Я охуел когда выяснил причину. И охуел еще раз, от того как ее удалось решить

Было:      users.push($(item).text());

Стало:     users.push(($(item).text()+' ').trim());

метод text() в cheerio.js должен возвращать строку. А он возвращает ссылку на то место где эта строка лежит. И таким образом ссылается на весь DOM. И естественно, что сборщик мусора не удаляет весь этот ненужный кусок говна пока в users будет ссылка на это говно, а она будет до самого конца, пока не распарсятся все 5000 страниц. И DOM для всех этих страниц будет храниться до конца, хотя оттуда нужно лишь 20 коротких строчек на страницу.

Попробовал явно преобразовать это говно в отдельную строку. Через new String(говно), _.clone(говно), говно.substr(0) и даже говно+’’. Не помогло. В последних 2ух случаях слишком умный движок V8 решил, что он лучше знает что я хочу и, блядь, соптимизировал. Оставил говно говном. Ну типа ж ничего не изменилось, верно? Со ссылкой на всю навозную кучу.

Я в полном ахуе. Но я таки вытянул 100.000 пользователей ЖЖ из общего рейтинга ;)

P.S О таком не пишут в мануалах и на показывают на модных курсах.

Profile

pokerfrog

February 2017

S M T W T F S
    1 2 34
567891011
12131415161718
19202122232425
262728    

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 10:05 pm
Powered by Dreamwidth Studios