Skip to content

Commit 23bd49f

Browse files
committed
only emit get events during deps parsing - improves perf
1 parent 7888d05 commit 23bd49f

File tree

4 files changed

+25
-19
lines changed

4 files changed

+25
-19
lines changed

src/compiler.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ var Emitter = require('./emitter'),
88
DepsParser = require('./deps-parser'),
99
ExpParser = require('./exp-parser'),
1010
transition = require('./transition'),
11-
11+
// cache deps ob
12+
depsOb = DepsParser.observer,
1213
// cache methods
1314
slice = Array.prototype.slice,
1415
log = utils.log,
@@ -163,8 +164,7 @@ CompilerProto.setupObserver = function () {
163164

164165
var compiler = this,
165166
bindings = compiler.bindings,
166-
observer = compiler.observer = new Emitter(),
167-
depsOb = DepsParser.observer
167+
observer = compiler.observer = new Emitter()
168168

169169
// a hash to hold event proxies for each root level key
170170
// so they can be referenced and removed later
@@ -174,9 +174,7 @@ CompilerProto.setupObserver = function () {
174174
observer
175175
.on('get', function (key) {
176176
check(key)
177-
if (depsOb.isObserving) {
178-
depsOb.emit('get', bindings[key])
179-
}
177+
depsOb.emit('get', bindings[key])
180178
})
181179
.on('set', function (key, val) {
182180
observer.emit('change:' + key, val)
@@ -492,7 +490,7 @@ CompilerProto.define = function (key, binding) {
492490
enumerable: true,
493491
get: function () {
494492
var value = binding.value
495-
if ((!binding.isComputed && (!value || !value.__observer__)) ||
493+
if (depsOb.active && (!binding.isComputed && (!value || !value.__observer__)) ||
496494
Array.isArray(value)) {
497495
// only emit non-computed, non-observed (primitive) values, or Arrays.
498496
// because these are the cleanest dependencies

src/deps-parser.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ module.exports = {
3333
*/
3434
parse: function (bindings) {
3535
utils.log('\nparsing dependencies...')
36-
observer.isObserving = true
36+
observer.active = true
3737
bindings.forEach(catchDeps)
38-
observer.isObserving = false
38+
observer.active = false
3939
utils.log('\ndone.')
4040
}
4141

src/observer.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var Emitter = require('./emitter'),
44
utils = require('./utils'),
5+
depsOb = require('./deps-parser').observer,
56

67
// cache methods
78
typeOf = utils.typeOf,
@@ -116,7 +117,9 @@ function bind (obj, key, path, observer) {
116117
enumerable: true,
117118
get: function () {
118119
// only emit get on tip values
119-
if (!watchable) observer.emit('get', fullKey)
120+
if (depsOb.active && !watchable) {
121+
observer.emit('get', fullKey)
122+
}
120123
return values[fullKey]
121124
},
122125
set: function (newVal) {

test/unit/specs/observer.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
describe('UNIT: Observer', function () {
22

33
var Observer = require('seed/src/observer'),
4-
Emitter = require('emitter')
4+
Emitter = require('emitter'),
5+
DepsOb = require('seed/src/deps-parser').observer
56

67
describe('Observing Object', function () {
78

@@ -31,14 +32,18 @@ describe('UNIT: Observer', function () {
3132
path: 'test'
3233
}))
3334

34-
it('should emit get events on tip values', getTestFactory({
35-
obj: { a: 1, b: { c: 2 } },
36-
expects: [
37-
'test.a',
38-
'test.b.c'
39-
],
40-
path: 'test'
41-
}))
35+
it('should emit get events on tip values', function () {
36+
DepsOb.active = true
37+
getTestFactory({
38+
obj: { a: 1, b: { c: 2 } },
39+
expects: [
40+
'test.a',
41+
'test.b.c'
42+
],
43+
path: 'test'
44+
})()
45+
DepsOb.active = false
46+
})
4247

4348
it('should emit set when first observing', function () {
4449
var obj = { a: 1, b: { c: 2} },

0 commit comments

Comments
 (0)