Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   MutationObserver или Наблюдатель (https://javascript.ru/forum/jquery/33754-mutationobserver-ili-nablyudatel.html)

Shitbox2 06.12.2012 21:03

MutationObserver или Наблюдатель
 
В продолжение этой темы http://javascript.ru/forum/misc/3037...nobserver.html

Нужно отслеживать изменения dom в определенном контейнере. Наверное, лучше подойдет MutationObserver, но по нему мало информации. В частности не нашел, в каких браузерах он поддерживается на данный момент. Подскажите, если знаете. Ну и на русском никакого руководства для быстрого старта тоже нет.

Второй вариант - паттерн Наблюдатель. Где можно взять наиболее вменяемые его реализации? В jQuery не встроили еще?

tenshi 07.12.2012 00:02

DOMSubtreeModified ие9+ и всеми остальными

Shitbox2 07.12.2012 07:24

А как он там называется? В хроме и сафари, например, MutationObserver не работает, там вместо него WebKitMutationObserver

tenshi 07.12.2012 18:32

http://lmgtfy.com/?q=DOMSubtreeModified

Shitbox2 07.12.2012 21:07

Врубился. Не то искал просто

Magneto 08.12.2012 02:17

Цитата:

Сообщение от tenshi
DOMSubtreeModified ие9+ и всеми остальными

Не нужно вводить пользователей в заблуждение.
Ка я уже писал: Так как Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам пользователя, то разработчики браузеров рекомендуют использовать MutationObserver. И это не просто рекомендации, например расширение для браузера Firefox не проходило модерацию из-за того что я использовал DOMSubtreeModified.
И MutationObserver были специально разработаны для замены Mutations Events.

Про MutationObserver можно прочитать здесь и здесь правда на англ.

Еще как вариант можно написать свой наблюдатель за изменением DOM дерева.

// Следим за всеми елементами и их атрибутами в div с id monitored
var originalDOM = document.getElementById('monitored').innerHTML,
	actualDOM;

setInterval(function () {
	actualDOM = document.getElementById('monitored').innerHTML;

	if (originalDOM !== actualDOM) {
		originalDOM = actualDOM;

		//	...
		//	Здесь нужный код
		//	...
	}
}, 1000); // проверяем изменения каждую секунду

tenshi 08.12.2012 12:47

> Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам

бенчмарки в студию

> разработчики браузеров рекомендуют использовать MutationObserver

сколько браузеров его поддерживают?

> Еще как вариант можно написать свой наблюдатель за изменением DOM дерева.

угу, сериализация всего поддерева - это куда быстрее чем всплытие событий

> проверяем изменения каждую секунду

и получится тупящий интерфейс

tenshi 08.12.2012 20:08

кроме как нагадить в карму ничего умнее не придумал?

Magneto 08.12.2012 21:10

Цитата:

Сообщение от tenshi
> Mutations Events (DOMSubtreeModified - одно из таких событий) являются очень требовательными к вычеслительным рессурсам

бенчмарки в студию

Так о чем с тобой разговаривать? Если я говорю что производители браузеров отказались от Mutations Events и вместо него советуют или вовсе отказаться от наблюдения за DOM деревом или использовать MutationObserver. А ты мне о бенчмарках.

А ну да ты настолько крут что производители браузеров тебе не указ.

А карма на то она и есть чтоб оценивать посты, не нравится как здесь (на форуме) устроено все - так не пользуйся.

tenshi 08.12.2012 21:49

> я говорю что производители браузеров отказались от Mutations Events

каких конкретно браузеров? начиная с каких версий их поддержки больше не будет?

> А ты мне о бенчмарках

то есть подтвердить свои слова цифрами ты не можешь?

Magneto 09.12.2012 02:56

Цитата:

Сообщение от tenshi
> я говорю что производители браузеров отказались от Mutations Events

каких конкретно браузеров? начиная с каких версий их поддержки больше не будет?

> А ты мне о бенчмарках

то есть подтвердить свои слова цифрами ты не можешь?

Я видел выше ты давал парню ссылку на http://lmgtfy.com - типа что лень погуглить. Так теперь вопрос: у тебя самого что руки отсохли, не можешь воспользоваться гуглом?

https://developer.mozilla.org/en-US/...vent_reference
https://developer.mozilla.org/en-US/...utation_events
https://groups.google.com/forum/?fro...rm/L0Lx11u5Bvs
https://groups.google.com/forum/#!to...rm/UH2VqFQRTDA

Ну и цифры, для тебя бедняжки с засохшими рученьками:
Цитата:

Сообщение от English
Adding DOM mutation listeners to a document profoundly degrades the performance of further DOM modifications to that document (making them 1.5 - 7 times slower!). Moreover, removing the listeners does not reverse the damage.

Цитата:

Сообщение от Русский
Использование событий Mutations Events резко снижает производительность дальнейшей модификации ДОМ (в 1.5 - 7 раз)


tenshi 09.12.2012 14:02

цитаты с форумов - это всё конечно замечательно, но где конкретные измерения? сколько узлов? как добавлялись? сколько обработчиков? где располагались?
и спрашиваю я всё это не потому что у меня руки отсохли, а потому что знаю что для одного поддерева всплывает ровно одно событие. во всех браузерах кроме ие. и вот в ие при большом числе изменяющихся узлов это может привести к тормозам. но это проблема конкретной реализации а не спецификации.
ты же предлагаешь использовать апи которое поддерживают лишь 2 браузера потому что по слухам оно вроде как быстрее.

BETEPAH 11.12.2014 13:51

Кто-нибудь сравнивал по нагрузке на браузер и прочие бенчмарки между MutationObservers и проверками нод setInterval'ами?


Часовой пояс GMT +3, время: 08:06.