Skip to content
This repository was archived by the owner on Apr 20, 2018. It is now read-only.

Commit 095a4a7

Browse files
Further perf work for Issue #519
1 parent 32ee552 commit 095a4a7

27 files changed

Lines changed: 340 additions & 598 deletions

dist/rx.all.compat.js

Lines changed: 46 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,7 @@
11811181
recursiveAction = function (state1) {
11821182
action(state1, function (state2, dueTime1) {
11831183
var isAdded = false, isDone = false,
1184-
d = scheduler[method].call(scheduler, state2, dueTime1, function (scheduler1, state3) {
1184+
d = scheduler[method](state2, dueTime1, function (scheduler1, state3) {
11851185
if (isAdded) {
11861186
group.remove(d);
11871187
} else {
@@ -1776,31 +1776,20 @@
17761776

17771777
Enumerable.prototype.concat = function () {
17781778
var sources = this;
1779-
return new AnonymousObservable(function (observer) {
1780-
var e;
1781-
try {
1782-
e = sources[$iterator$]();
1783-
} catch (err) {
1784-
observer.onError(err);
1785-
return;
1786-
}
1779+
return new AnonymousObservable(function (o) {
1780+
var e = sources[$iterator$]();
17871781

1788-
var isDisposed,
1789-
subscription = new SerialDisposable();
1782+
var isDisposed, subscription = new SerialDisposable();
17901783
var cancelable = immediateScheduler.scheduleRecursive(function (self) {
1791-
var currentItem;
17921784
if (isDisposed) { return; }
1793-
17941785
try {
1795-
currentItem = e.next();
1786+
var currentItem = e.next();
17961787
} catch (ex) {
1797-
observer.onError(ex);
1798-
return;
1788+
return o.onError(ex);
17991789
}
18001790

18011791
if (currentItem.done) {
1802-
observer.onCompleted();
1803-
return;
1792+
return o.onCompleted();
18041793
}
18051794

18061795
// Check if promise
@@ -1810,9 +1799,9 @@
18101799
var d = new SingleAssignmentDisposable();
18111800
subscription.setDisposable(d);
18121801
d.setDisposable(currentValue.subscribe(
1813-
observer.onNext.bind(observer),
1814-
observer.onError.bind(observer),
1815-
function () { self(); })
1802+
function(x) { o.onNext(x); },
1803+
function(err) { o.onError(err); },
1804+
self)
18161805
);
18171806
});
18181807

@@ -1824,34 +1813,24 @@
18241813

18251814
Enumerable.prototype.catchError = function () {
18261815
var sources = this;
1827-
return new AnonymousObservable(function (observer) {
1828-
var e;
1829-
try {
1830-
e = sources[$iterator$]();
1831-
} catch (err) {
1832-
observer.onError(err);
1833-
return;
1834-
}
1816+
return new AnonymousObservable(function (o) {
1817+
var e = sources[$iterator$]();
18351818

1836-
var isDisposed,
1837-
lastException,
1838-
subscription = new SerialDisposable();
1839-
var cancelable = immediateScheduler.scheduleRecursive(function (self) {
1819+
var isDisposed, subscription = new SerialDisposable();
1820+
var cancelable = immediateScheduler.scheduleRecursiveWithState(null, function (lastException, self) {
18401821
if (isDisposed) { return; }
18411822

1842-
var currentItem;
18431823
try {
1844-
currentItem = e.next();
1824+
var currentItem = e.next();
18451825
} catch (ex) {
1846-
observer.onError(ex);
1847-
return;
1826+
return observer.onError(ex);
18481827
}
18491828

18501829
if (currentItem.done) {
1851-
if (lastException) {
1852-
observer.onError(lastException);
1830+
if (lastException !== null) {
1831+
o.onError(lastException);
18531832
} else {
1854-
observer.onCompleted();
1833+
o.onCompleted();
18551834
}
18561835
return;
18571836
}
@@ -1863,12 +1842,9 @@
18631842
var d = new SingleAssignmentDisposable();
18641843
subscription.setDisposable(d);
18651844
d.setDisposable(currentValue.subscribe(
1866-
observer.onNext.bind(observer),
1867-
function (exn) {
1868-
lastException = exn;
1869-
self();
1870-
},
1871-
observer.onCompleted.bind(observer)));
1845+
function(x) { o.onNext(x); },
1846+
self,
1847+
function() { o.onCompleted(); }));
18721848
});
18731849
return new CompositeDisposable(subscription, cancelable, disposableCreate(function () {
18741850
isDisposed = true;
@@ -1879,43 +1855,31 @@
18791855

18801856
Enumerable.prototype.catchErrorWhen = function (notificationHandler) {
18811857
var sources = this;
1882-
return new AnonymousObservable(function (observer) {
1883-
var e;
1884-
1885-
var exceptions = new Subject();
1886-
1887-
var handled = notificationHandler(exceptions);
1888-
1889-
var notifier = new Subject();
1858+
return new AnonymousObservable(function (o) {
1859+
var exceptions = new Subject(),
1860+
notifier = new Subject(),
1861+
handled = notificationHandler(exceptions),
1862+
notificationDisposable = handled.subscribe(notifier);
18901863

1891-
var notificationDisposable = handled.subscribe(notifier);
1892-
1893-
try {
1894-
e = sources[$iterator$]();
1895-
} catch (err) {
1896-
observer.onError(err);
1897-
return;
1898-
}
1864+
var e = sources[$iterator$]();
18991865

19001866
var isDisposed,
19011867
lastException,
19021868
subscription = new SerialDisposable();
19031869
var cancelable = immediateScheduler.scheduleRecursive(function (self) {
19041870
if (isDisposed) { return; }
19051871

1906-
var currentItem;
19071872
try {
1908-
currentItem = e.next();
1873+
var currentItem = e.next();
19091874
} catch (ex) {
1910-
observer.onError(ex);
1911-
return;
1875+
return o.onError(ex);
19121876
}
19131877

19141878
if (currentItem.done) {
19151879
if (lastException) {
1916-
observer.onError(lastException);
1880+
o.onError(lastException);
19171881
} else {
1918-
observer.onCompleted();
1882+
o.onCompleted();
19191883
}
19201884
return;
19211885
}
@@ -1928,19 +1892,17 @@
19281892
var inner = new SingleAssignmentDisposable();
19291893
subscription.setDisposable(new CompositeDisposable(inner, outer));
19301894
outer.setDisposable(currentValue.subscribe(
1931-
observer.onNext.bind(observer),
1895+
function(x) { o.onNext(x); },
19321896
function (exn) {
1933-
inner.setDisposable(notifier.subscribe(function(){
1934-
self();
1935-
}, function(ex) {
1936-
observer.onError(ex);
1897+
inner.setDisposable(notifier.subscribe(self, function(ex) {
1898+
o.onError(ex);
19371899
}, function() {
1938-
observer.onCompleted();
1900+
o.onCompleted();
19391901
}));
19401902

19411903
exceptions.onNext(exn);
19421904
},
1943-
observer.onCompleted.bind(observer)));
1905+
function() { o.onCompleted(); }));
19441906
});
19451907

19461908
return new CompositeDisposable(notificationDisposable, subscription, cancelable, disposableCreate(function () {
@@ -1962,13 +1924,15 @@
19621924
};
19631925

19641926
var enumerableOf = Enumerable.of = function (source, selector, thisArg) {
1965-
selector || (selector = identity);
1927+
if (selector) {
1928+
var selectorFn = bindCallback(selector, thisArg, 3);
1929+
}
19661930
return new Enumerable(function () {
19671931
var index = -1;
19681932
return new Enumerator(
19691933
function () {
19701934
return ++index < source.length ?
1971-
{ done: false, value: selector.call(thisArg, source[index], index, source) } :
1935+
{ done: false, value: !selector ? source[index] : selectorFn(source[index], index, source) } :
19721936
doneEnumerator;
19731937
});
19741938
});
@@ -8096,7 +8060,6 @@
80968060
};
80978061

80988062
var JoinObserver = (function (__super__) {
8099-
81008063
inherits(JoinObserver, __super__);
81018064

81028065
function JoinObserver(source, onError) {
@@ -8114,8 +8077,7 @@
81148077
JoinObserverPrototype.next = function (notification) {
81158078
if (!this.isDisposed) {
81168079
if (notification.kind === 'E') {
8117-
this.onError(notification.exception);
8118-
return;
8080+
return this.onError(notification.exception);
81198081
}
81208082
this.queue.push(notification);
81218083
var activePlans = this.activePlans.slice(0);
@@ -8228,15 +8190,15 @@
82288190

82298191
function observableTimerDateAndPeriod(dueTime, period, scheduler) {
82308192
return new AnonymousObservable(function (observer) {
8231-
var count = 0, d = dueTime, p = normalizeTime(period);
8232-
return scheduler.scheduleRecursiveWithAbsolute(d, function (self) {
8193+
var d = dueTime, p = normalizeTime(period);
8194+
return scheduler.scheduleRecursiveWithAbsoluteAndState(0, d, function (count, self) {
82338195
if (p > 0) {
82348196
var now = scheduler.now();
82358197
d = d + p;
82368198
d <= now && (d = now + p);
82378199
}
8238-
observer.onNext(count++);
8239-
self(d);
8200+
observer.onNext(count);
8201+
self(count + 1, d);
82408202
});
82418203
});
82428204
}

dist/rx.all.compat.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rx.all.compat.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)