[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 О таком не пишут в мануалах и на показывают на модных курсах.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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. 10th, 2025 07:09 pm
Powered by Dreamwidth Studios