Sergey
И вычислять на ходу
Sergey
Взял один элемент и произвел вычисления вместе с ранее вычисленными
Sheldhur
так я в дочернем процессе всё буду делать, мне главное, чтобы он out of memory не кинул
Sergey
Разбирай на части
Sergey
Может кинуть
Sergey
От оси зависит
IL'shat
быстрее через бд будет, в нее перегнать и птом и там группировать и вытаскивать по кускам в процессе рендеринга
Sheldhur
не, там математики много :)
Sheldhur
бд не осилит :)
Sheldhur
бд и так есть
Sheldhur
буду кусочками вытаскивать, значит
Dmitry
Так, а распараллелить обход массива? Разбить на несколько подмассивов? Обходить кусками и тд. Ну, из очевидного)
IL'shat
а если вогнать результат вычислений в бд
IL'shat
там же не реал тайм?
IL'shat
даже если реал тайм можно переодически переписывать данные птом сигнал на рендер посылать
GG
не, там математики много :)
Кстати, посмотри на лодаш, там есть методы работы с массивов, типо вычислить среднее, исключить не найденное и т. д.
Sheldhur
это уже на нативном сделано
Sergey
а вообще стримами будет проще всего, особенно если из сети получаешь данные (Rx, Kefir)
Sergey
обрабатывать по мере получения
Aleksey
как думаете, js не поперхнется массивом из 1 695 743 строк?
Попробуй использовать Связку promises +lodash
Sheldhur
ну...из базы вытащил, вроде даже спокойно, больше 1.5гб не сожрало на 1.6кк значений
Sheldhur
но всё равно разбивку сделаю, по 500к, наверно
Aleksey
используй для перебора массива Promise.all(map.someArray(function(){}))
Sheldhur
а чём мне промайз поможет? :)
Sergey
но всё равно разбивку сделаю, по 500к, наверно
чем меньше пачка, тем быстрее работать будет
Sergey
в твоем случае идеал, наверное, 10-100К
Sheldhur
но я тогда потрачу время на обращение к базе
Aleksey
во первых промис до завершения не позволит остальному коду что то делать в о вторых почитай https://habrahabr.ru/company/mailru/blog/269465/
Sheldhur
на таком количестве
Aleksey
плюс цепочки промисов
Aleksey
ты попробуй
Sheldhur
уже было :)
Sergey
ты попробуй
изучи стандарт ecmascript
Aleksey
все плохо?
Sheldhur
стек забивается
Sergey
все плохо?
синхронные операции блокируют поток, и промисы вообще никакой погоды не сделают только увеличат память
Sergey
обход массива это как раз синхронная операция
Sheldhur
промис даже на 100к все вешает
Aleksey
я не настаиваю но массив можно перебрать лодашевским фор.ичем он с этим справляется + куча плющек на поиск и выбоку нужных элементов массива
Aleksey
плюс лодашевкая Math
Sheldhur
нативное явно быстрее лодаша будет :)
Sheldhur
особенно, если не юзать всякие forEach, а старый добрый for
Aleksey
не всегда нативно forEach для перебора массива не используешь к тому же var someVal = someArray.filter('someVAl'...) не сможешь использовать
Sheldhur
все эти forEach, map, reduce, filter это обертка над for'ом
Sheldhur
быстрее это всё в одном цикле сделать
Sergey
все эти forEach, map, reduce, filter это обертка над for'ом
mac и reduce под капотом имеют нативную реализацию (в v8)
Sheldhur
ну ок
IL'shat
Как вариант можно чистить память для всех элементов внутри цикла, те For(i=0;i<len;i++){ let v=...; v=null;}
IL'shat
Может памяти будет меньше жрать
GG
нативное явно быстрее лодаша будет :)
если просто перебирать каждый i'ный элемент, то да. А если нужны какие-то сложные операции с масивом, то лодаш лучше справиться, там внутри работают алгоритмы, которые могут решают задачу, даже не перебрав весь массив
Sheldhur
Sheldhur
sequelize можно заставить запихать Station в отдельный объект?
Sheldhur
чтобы можно было обращаться item.Station.id
IL'shat
Все поля по по которым будут сравнения вынеси в поля таблицы, раскидывай их
Sheldhur
шта
IL'shat
Птом повесь индекс на поля которые с помощь === будут сравниватся http://docs.sequelizejs.com/manual/tutorial/models-definition.html#indexes
IL'shat
Вынеси в отдельное поле
IL'shat
чтобы можно было обращаться item.Station.id
IL'shat
При заполнении раскидай все такие которые во вложенной структуе
Sheldhur
чёт ниче не понял, как мне индексы помогут в этом
IL'shat
Ну ты в каком месте хочешь до вложенного объекта стучаться?
IL'shat
Если в условии для фильтрации то индекс должен помощь, если для рендора то не сильно поможет
Sheldhur
это индекс для базы
Sheldhur
причем он тут
Sheldhur
во всех челочеческих ORM все связи пихаются в отдельные объекты, должно быть: { Station: { id: 1, name: ... ... } compF: ... ... }
Sheldhur
а не то что sequelize сделал
IL'shat
Ну я про оптимизацию говорю
Sheldhur
ставить индексы я умею, спасибо :)
Sheldhur
я спрашиваю как в результате выборки сделать, чтобы Station, который джойнится был в отдельном объекте, чтобы в цикле потом обращаться item.Station.id, а не item['Station.id']
IL'shat
Ну где юзается переменная?
IL'shat
Условие или рендер
Sheldhur
причем тут цикл