Skip to content

Commit

Permalink
Performance improvements. Bump to 1.2.7
Browse files Browse the repository at this point in the history
  • Loading branch information
lukejagodzinski committed Dec 16, 2015
1 parent 66ac688 commit 1c1fe3a
Show file tree
Hide file tree
Showing 10 changed files with 240 additions and 15 deletions.
4 changes: 4 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 1.2.7 (2015-12-16)

- Performance improvements

# 1.2.6 (2015-12-02)

- Fix a bug with modifiers when setting object using a reference
Expand Down
22 changes: 19 additions & 3 deletions lib/modules/core/base_class.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ var BaseClass = Astro.BaseClass = function BaseClass(attrs) {

// Add the private "_modifiers" property to track changes made on the document.
doc._modifiers = {};
// Add the private "_original" property to store the original document before
// modifications.
doc._original = {};

// Trigger the "beforeInit" event handlers.
event = new Astro.Event('beforeInit', attrs);
Expand Down Expand Up @@ -43,3 +40,22 @@ var BaseClass = Astro.BaseClass = function BaseClass(attrs) {
event.target = doc;
Class.emitEvent(event);
};

// Add the "_original" property for backward compatibility that will be lazy
// executed.
Object.defineProperty(BaseClass.prototype, '_original', {
get: function() {
var doc = this;
var Class = doc.constructor;

if (doc._id) {
var originalDoc = Class.findOne(doc._id);
} else {
var originalDoc = new Class();
}

return originalDoc;
},
enumerable: false,
configurable: false
});
3 changes: 2 additions & 1 deletion lib/modules/core/config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Astro.config = {
verbose: true,
disableTransform: false
disableTransform: false,
triggerEvents: true
};
4 changes: 4 additions & 0 deletions lib/modules/events/init_class.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ classMethods.hasEvent = function(eventName, eventHandler) {
};

classMethods.emitEvent = function(event) {
if (!Astro.config.triggerEvents) {
return;
}

if (!event) {
return;
}
Expand Down
2 changes: 0 additions & 2 deletions lib/modules/fields/ejson.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ events.toJSONValue = function(e) {
});

var json = {
original: EJSON.stringify(doc._original),
modifiers: EJSON.stringify(doc._modifiers),
values: EJSON.stringify(values)
};
Expand All @@ -22,7 +21,6 @@ events.fromJSONValue = function(e) {
var doc = this;
var json = e.data;

doc._original = EJSON.parse(json.original);
doc._modifiers = EJSON.parse(json.modifiers);
_.extend(doc, EJSON.parse(json.values));
};
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/fields/modified.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ proto.getModified = function(old) {
if (field.transient) {
return;
}
// If a value differs from the value in the "_original" object then it means
// If a value differs from the value in the original object then it means
// that fields was modified from the last save.
if (!EJSON.equals(originalDoc[fieldName], doc[fieldName])) {
// Take a value before or after modification.
Expand Down
9 changes: 8 additions & 1 deletion lib/modules/fields/modifiers.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@ proto._hasModifier = function(modifier, fieldName) {

proto._getModifier = function(modifierName, fieldName) {
var doc = this;
var Class = doc.constructor;

if (doc._id) {
var originalDoc = Class.findOne(doc._id);
} else {
var originalDoc = new Class();
}

var result = {};

Expand All @@ -187,7 +194,7 @@ proto._getModifier = function(modifierName, fieldName) {
// Get an original value of the field.
var originalValue;
Astro.utils.fields.traverseNestedDocs(
doc._original,
originalDoc,
fieldName,
function(nestedField, nestedFieldName, Class, field, index) {
originalValue = _.isUndefined(index) ?
Expand Down
5 changes: 0 additions & 5 deletions lib/modules/storage/init_definition.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,6 @@ prototypeMethods.save = function(fieldsNames, callback) {
event.target = doc;
Class.emitEvent(event);

// Copy values to the "_original" property.
_.each(fieldsNames, function(fieldName) {
doc._original[fieldName] = EJSON.clone(doc[fieldName]);
});
// Clear a modifier.
doc._clearModifiers();

Expand Down Expand Up @@ -203,7 +199,6 @@ prototypeMethods.copy = function(save) {
// Remove the "_id" value and set the "_isNew" flag to false so that it will
// save the object as a new document instead updating the old one.
copy._id = null;
copy._original._id = null;
copy._isNew = true;

if (save) {
Expand Down
2 changes: 1 addition & 1 deletion package.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package.describe({
summary: 'Model layer for Meteor',
version: '1.2.6',
version: '1.2.7',
name: 'jagi:astronomy',
git: 'https://github.com/jagi/meteor-astronomy.git'
});
Expand Down
202 changes: 201 additions & 1 deletion test/events/events_order.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,107 @@ Tinytest.add('Events - Order', function(test) {
'beforeSave',
'beforeSave global',
'beforeUpdate',
'beforeUpdate global'
'beforeUpdate global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global'
];
event.save();
test.equal(actualEventsList, expectedEventsList,
Expand All @@ -153,6 +253,106 @@ Tinytest.add('Events - Order', function(test) {
'beforeSave global',
'beforeUpdate',
'beforeUpdate global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'beforeInit',
'beforeInit global',
'beforeChange (_id)',
'beforeChange global (_id)',
'beforeSet (_id)',
'beforeSet global (_id)',
'afterSet (_id)',
'afterSet global (_id)',
'afterChange (_id)',
'afterChange global (_id)',
'beforeChange (childField)',
'beforeChange global (childField)',
'beforeSet (childField)',
'beforeSet global (childField)',
'afterSet (childField)',
'afterSet global (childField)',
'afterChange (childField)',
'afterChange global (childField)',
'afterInit',
'afterInit global',
'afterUpdate',
'afterUpdate global',
'afterSave',
Expand Down

0 comments on commit 1c1fe3a

Please sign in to comment.