Добрый день! Пилим мы приложение на meteor. Есть у нас функция генерации xls файла из нашей БД.
Процесс генерации разделен на 4 части:
- загрузка из БД документов;
- обработка документов для выгрузки;
- генерация файла;
- отдача файла юзеру;
На нескольких этапах столкнулись с проблемами. Итак, по очереди:
- почему-то при большом запросе (20к записей по 1кб каждая) почему-то очень напрягается процессор (и ест его именно meteor). Пока не смогли решить - повесил временный костыль через .rawCollection, там все ок.
- При обработке документов каждая итерация занимает порядка 30мс, итого 20к * 30 = 10 минут. В это время там бежит цикл по всем записям и преобразует их в нужный вид. В этот момент загрузка висит на 100% и управление в главный поток передается крайне редко (хотя в meteor используется fibers, и коды выполняется в отдельном волокне. Из этого делаю вывод - все очень странно). На данный момент висит костыль в виде setTimeout на 30мс каждые 10 записей. Это увеличивает скорость генерации, но по крайней мере снижает постоянную нагрузку на сервер и дает обработать запросы от других пользователей.
- Генерация файла выполняется сторонним пакетом и тоже нагружает систему, правда тут быстрее все работает (используем excel4node последней версии).
- Тут вроде все ок.
Если кто поможет разобраться хотя-бы с одним из пунктов, буду очень благодарен.