Using Object.observe and Array.observe

Activate observer by default:

alight.debug.useObserver = true

You can do this for specific scope:

alight.Scope({useObserver: true})
alight.Scope({useObserver: false})

Details:

* It's desirable don't change base variables, it can reduce the performance, example:
// Wrong
scope.title = 'Linux'
scope.user = {name: 'Linux'}
scope.list = []
...
scope.title = 'Ubuntu'
scope.user = {name: 'Ubuntu'}
scope.list = [{}]

// Right
scope.data = {
	title: 'Linux'
	user: {name: 'Linux'}
	list: []
}
scope.user = {name: 'Linux'}
scope.list = []
...
scope.data.title = 'Ubuntu'
scope.user.name = 'Ubuntu'
scope.data.user = {name: 'Ubuntu'}
scope.data.list = [{}]
scope.list.push({})

In the second example, base variables weren't changed, but a content of them was changed.

Использование Object.observe и Array.observe

Что-бы включить observer по умолчанию, нужно установить флаг:

alight.debug.useObserver = true

Для конкретного Scope можно задать это параметром:

alight.Scope({useObserver: true})
alight.Scope({useObserver: false})

Нюансы: Желательно не менять переменные в корне Scope, т.к. это может снизить производительность, примеры:

// Не правильно
scope.title = 'Linux'
scope.user = {name: 'Linux'}
scope.list = []
...
scope.title = 'Ubuntu'
scope.user = {name: 'Ubuntu'}
scope.list = [{}]

// Правильно
scope.data = {
	title: 'Linux'
	user: {name: 'Linux'}
	list: []
}
scope.user = {name: 'Linux'}
scope.list = []
...
scope.data.title = 'Ubuntu'
scope.user.name = 'Ubuntu'
scope.data.user = {name: 'Ubuntu'}
scope.data.list = [{}]
scope.list.push({})

При этом подходе, переменные в корне не меняются, а меняется их содержимое. Так же желательно не использовать $watch на простые типы (строки, числа), которые находятся в корне scope.

comments powered by Disqus