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() {
var $body, offset, outlet;
if (!this.docAt) {
outlet = $('#main-outlet');
var headerView = this;
// Check the dock after the current run loop. While rendering,
// it's much slower to calculate `outlet.offset()`
Em.run.next(function () {
if (!headerView.docAt) {
var outlet = $('#main-outlet');
if (!(outlet && outlet.length === 1)) return;
this.docAt = outlet.offset().top;
headerView.docAt = outlet.offset().top;
}
offset = window.pageYOffset || $('html').scrollTop();
if (offset >= this.docAt) {
if (!this.dockedHeader) {
$body = $('body');
$body.addClass('docked');
this.dockedHeader = true;
var offset = window.pageYOffset || $('html').scrollTop();
if (offset >= headerView.docAt) {
if (!headerView.dockedHeader) {
$('body').addClass('docked');
headerView.dockedHeader = true;
}
} else {
if (this.dockedHeader) {
if (headerView.dockedHeader) {
$('body').removeClass('docked');
this.dockedHeader = false;
headerView.dockedHeader = false;
}
}
});
},
/**

View File

@ -91,7 +91,11 @@ Discourse.TopicView = Discourse.View.extend(Discourse.Scrolling, {
this.bindScrolling({debounce: 0});
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) {
return Discourse.ClickTrack.trackClick(e);

View File

@ -15807,7 +15807,11 @@ ViewCollection.prototype = {
var views = this.views, view;
for (var i = 0, l = views.length; i < l; 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;
},
_elementWillChange: Ember.beforeObserver(function() {
this.forEachChildView(function(view) {
Ember.propertyWillChange(view, 'element');
});
}, 'element'),
/**
@private
@ -17352,7 +17350,8 @@ Ember.View = Ember.CoreView.extend(
*/
_elementDidChange: Ember.observer(function() {
this.forEachChildView(function(view) {
Ember.propertyDidChange(view, 'element');
var meta = Em.meta(view);
delete meta.cache['element'];
});
}, 'element'),
@ -20746,17 +20745,13 @@ var DOMManager = {
view.clearRenderedChildren();
var buffer = view.renderToBuffer();
// view.invokeRecursively(function(view) {
// view.propertyWillChange('element');
// });
view.propertyWillChange('element');
view.triggerRecursively('willInsertElement');
morph.replaceWith(buffer.string());
view.transitionTo('inDOM');
// view.invokeRecursively(function(view) {
// view.propertyDidChange('element');
// });
view.propertyDidChange('element');
view.triggerRecursively('didInsertElement');
notifyMutationListeners();

View File

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