Skip to content

Commit

Permalink
perf(switchMapTo): remove tryCatch/errorObject (~2x improvement)
Browse files Browse the repository at this point in the history
Before:
                                       |     RxJS 4.0.7 | RxJS 5.0.0-beta.1 | factor | % improved
--------------------------------------------------------------------------------------------------
switchmapto-resultselector - immediate | 1,695 (±1.02%) |   12,229 (±1.15%) |  7.21x |     621.3%
               switchmapto - immediate | 2,910 (±0.80%) |   32,560 (±0.99%) | 11.19x |   1,018.8%
            switchmapto-resultselector | 2,621 (±0.87%) |   12,473 (±0.49%) |  4.76x |     375.9%
                           switchmapto | 3,300 (±2.11%) |   15,433 (±0.57%) |  4.68x |     367.7%

After:
                                       |     RxJS 4.0.7 | RxJS 5.0.0-beta.1 | factor | % improved
--------------------------------------------------------------------------------------------------
switchmapto-resultselector - immediate | 1,645 (±2.07%) |   28,788 (±5.21%) | 17.50x |   1,650.5%
               switchmapto - immediate | 3,056 (±0.65%) |   31,656 (±1.17%) | 10.36x |     936.0%
            switchmapto-resultselector | 2,793 (±0.54%) |   14,322 (±1.15%) |  5.13x |     412.7%
                           switchmapto | 3,381 (±4.13%) |   15,969 (±3.86%) |  4.72x |     372.2%
  • Loading branch information
luisgabriel authored and kwonoj committed Feb 6, 2016
1 parent 1abdd10 commit c8cf72a
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/operator/switchMapTo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import {Operator} from '../Operator';
import {Observable} from '../Observable';
import {Subscriber} from '../Subscriber';
import {Subscription} from '../Subscription';
import {tryCatch} from '../util/tryCatch';
import {errorObject} from '../util/errorObject';
import {OuterSubscriber} from '../OuterSubscriber';
import {InnerSubscriber} from '../InnerSubscriber';
import {subscribeToResult} from '../util/subscribeToResult';
Expand Down Expand Up @@ -69,14 +67,23 @@ class SwitchMapToSubscriber<T, R, R2> extends OuterSubscriber<T, R> {
innerSub: InnerSubscriber<T, R>): void {
const { resultSelector, destination } = this;
if (resultSelector) {
const result = tryCatch(resultSelector)(outerValue, innerValue, outerIndex, innerIndex);
if (result === errorObject) {
destination.error(errorObject.e);
} else {
destination.next(result);
}
this.tryResultSelector(outerValue, innerValue, outerIndex, innerIndex);
} else {
destination.next(innerValue);
}
}

private tryResultSelector(outerValue: T, innerValue: R,
outerIndex: number, innerIndex: number): void {
const { resultSelector, destination } = this;
let result: R2;
try {
result = resultSelector(outerValue, innerValue, outerIndex, innerIndex);
} catch (err) {
destination.error(err);
return;
}

destination.next(result);
}
}

0 comments on commit c8cf72a

Please sign in to comment.