Front-end Optimizations

This commit is contained in:
Robin Ward 2013-07-31 14:52:31 -04:00
parent 0480c55d9f
commit 51d86b7a91
4 changed files with 90 additions and 93 deletions

View File

@ -64,25 +64,32 @@ Discourse.HeaderView = Discourse.View.extend({
}, },
examineDockHeader: function() { examineDockHeader: function() {
var $body, offset, outlet;
if (!this.docAt) { var headerView = this;
outlet = $('#main-outlet');
if (!(outlet && outlet.length === 1)) return; // Check the dock after the current run loop. While rendering,
this.docAt = outlet.offset().top; // it's much slower to calculate `outlet.offset()`
} Em.run.next(function () {
offset = window.pageYOffset || $('html').scrollTop(); if (!headerView.docAt) {
if (offset >= this.docAt) { var outlet = $('#main-outlet');
if (!this.dockedHeader) { if (!(outlet && outlet.length === 1)) return;
$body = $('body'); headerView.docAt = outlet.offset().top;
$body.addClass('docked');
this.dockedHeader = true;
} }
} else {
if (this.dockedHeader) { var offset = window.pageYOffset || $('html').scrollTop();
$('body').removeClass('docked'); if (offset >= headerView.docAt) {
this.dockedHeader = false; if (!headerView.dockedHeader) {
$('body').addClass('docked');
headerView.dockedHeader = true;
}
} else {
if (headerView.dockedHeader) {
$('body').removeClass('docked');
headerView.dockedHeader = false;
}
} }
} });
}, },
/** /**

View File

@ -91,7 +91,11 @@ Discourse.TopicView = Discourse.View.extend(Discourse.Scrolling, {
this.bindScrolling({debounce: 0}); this.bindScrolling({debounce: 0});
var topicView = this; var topicView = this;
$(window).bind('resize.discourse-on-scroll', function() { topicView.updatePosition(); }); Em.run.schedule('afterRender', function () {
$(window).resize('resize.discourse-on-scroll', function() {
topicView.updatePosition();
});
});
this.$().on('mouseup.discourse-redirect', '.cooked a, a.track-link', function(e) { this.$().on('mouseup.discourse-redirect', '.cooked a, a.track-link', function(e) {
return Discourse.ClickTrack.trackClick(e); return Discourse.ClickTrack.trackClick(e);

View File

@ -15807,7 +15807,11 @@ ViewCollection.prototype = {
var views = this.views, view; var views = this.views, view;
for (var i = 0, l = views.length; i < l; i++) { for (var i = 0, l = views.length; i < l; i++) {
view = views[i]; view = views[i];
if (view.trigger) { view.trigger(eventName); }
if (view.trigger) {
t2 = new Date().getTime();
view.trigger(eventName);
}
} }
}, },
@ -17335,12 +17339,6 @@ Ember.View = Ember.CoreView.extend(
return viewCollection; return viewCollection;
}, },
_elementWillChange: Ember.beforeObserver(function() {
this.forEachChildView(function(view) {
Ember.propertyWillChange(view, 'element');
});
}, 'element'),
/** /**
@private @private
@ -17352,7 +17350,8 @@ Ember.View = Ember.CoreView.extend(
*/ */
_elementDidChange: Ember.observer(function() { _elementDidChange: Ember.observer(function() {
this.forEachChildView(function(view) { this.forEachChildView(function(view) {
Ember.propertyDidChange(view, 'element'); var meta = Em.meta(view);
delete meta.cache['element'];
}); });
}, 'element'), }, 'element'),
@ -20746,17 +20745,13 @@ var DOMManager = {
view.clearRenderedChildren(); view.clearRenderedChildren();
var buffer = view.renderToBuffer(); var buffer = view.renderToBuffer();
// view.invokeRecursively(function(view) { view.propertyWillChange('element');
// view.propertyWillChange('element');
// });
view.triggerRecursively('willInsertElement'); view.triggerRecursively('willInsertElement');
morph.replaceWith(buffer.string()); morph.replaceWith(buffer.string());
view.transitionTo('inDOM'); view.transitionTo('inDOM');
// view.invokeRecursively(function(view) { view.propertyDidChange('element');
// view.propertyDidChange('element');
// });
view.triggerRecursively('didInsertElement'); view.triggerRecursively('didInsertElement');
notifyMutationListeners(); notifyMutationListeners();

View File

@ -17156,12 +17156,6 @@ Ember.View = Ember.CoreView.extend(
return viewCollection; return viewCollection;
}, },
_elementWillChange: Ember.beforeObserver(function() {
this.forEachChildView(function(view) {
Ember.propertyWillChange(view, 'element');
});
}, 'element'),
/** /**
@private @private
@ -17173,7 +17167,8 @@ Ember.View = Ember.CoreView.extend(
*/ */
_elementDidChange: Ember.observer(function() { _elementDidChange: Ember.observer(function() {
this.forEachChildView(function(view) { this.forEachChildView(function(view) {
Ember.propertyDidChange(view, 'element'); var meta = Em.meta(view);
delete meta.cache['element'];
}); });
}, 'element'), }, 'element'),
@ -20561,17 +20556,13 @@ var DOMManager = {
view.clearRenderedChildren(); view.clearRenderedChildren();
var buffer = view.renderToBuffer(); var buffer = view.renderToBuffer();
// view.invokeRecursively(function(view) { view.propertyWillChange('element');
// view.propertyWillChange('element');
// });
view.triggerRecursively('willInsertElement'); view.triggerRecursively('willInsertElement');
morph.replaceWith(buffer.string()); morph.replaceWith(buffer.string());
view.transitionTo('inDOM'); view.transitionTo('inDOM');
// view.invokeRecursively(function(view) { view.propertyDidChange('element');
// view.propertyDidChange('element');
// });
view.triggerRecursively('didInsertElement'); view.triggerRecursively('didInsertElement');
notifyMutationListeners(); notifyMutationListeners();