2016-04-01 7 views
2

Я новичок в мире rxjs и пытаюсь обнять его вокруг. Мое понимание является одной из причин использования rxjs - улучшить производительность с помощью больших наборов данных.rxjs performance array vs stream

Я пытаюсь измерить улучшение скорости, которое вы могли бы получить против нормальных массивов с высокими функциями (карта, уменьшить).

Я создал этот пример здесь https://jsbin.com/bagoli/edit?js,console

Идея заключается в том, чтобы сгенерировать массив и применить некоторые операторы к нему, измеряя время, потраченное.

Я не понимаю, почему расчет потока всегда медленнее. Я что-то упускаю?

Благодарим за помощь.

+0

Я хотел бы упомянуть, что поведение по умолчанию 'Rx.Observable.from' (и я верю' Rx.Observable.fromArray') заключается в использовании текущего планировщика потоков. В случаях, когда вы хотите сделать большую обработку в основном потоке, вы, вероятно, захотите указать другой планировщик ('Rx.Scheduler.default'), чтобы избежать блокировки пользовательского интерфейса. –

ответ

1

Функция calculateWithStreams является асинхронной и будет работать параллельно с вашей функцией Array. Поэтому сделать это медленнее. Если вы запускаете их по одному, времена в основном одинаковы, как только вы увеличиваете размер немного.

У RxJS есть, конечно, некоторые накладные расходы по сравнению с собственными массивами, но это компенсирует его ленивой оценкой.

Также считайте, что улучшение не только в скорости выполнения, но и в использовании памяти. Версия Array всегда создаст новый массив и займет больше памяти.

+0

Привет, Лука благодарю вас за информацию. Я попытался запустить их по одному, и результаты почти одинаковы. Я не вижу большой разницы. Я знал о сокращении памяти, которое уже является плюсом, но кажется, что нет такого большого выигрыша в скорости с реактивным подходом или я что-то делаю неправильно – David