MutationObserver



  • Ранее мне было необходимо чучу подредактировать DOM в момент загрузки элементов или сразу после, поэтому я в плитке "выполнять при каждой загрузке браузера" установил нехитрый обработчик событий

    document.addEventListener("DOMSubtreeModified", foo);
    

    все было пока foo чучу не разрослося, и превратилось в монстра который имеет больше одного ядра и увеличивает время загрузки страницы в десятки раз. Я решил проблему разделением, но хотелось бы иметь универсальное решение.
    тут я должен заметить, что я знаю причину столь адовой загрузки процессора - у меня при каждой модификации DOM изменяются атрибуты во !!!ВСЕХ элементах, каждый раз. Я мог бы избавится от изменения атрибутов во всех элементах. И вероятно мне следует использовать другое событие, например DOMNodeInserted. Но в погоне за производительностью я принял решение переделать логику с Мутацион Евент, на Мутацион Наблюдатель. Но потому что я его не понимал мой код не работает.

    например я решил что-то что угодно изменить при появлении элемента и попытался установит наблюдателя таким образом.

    var t = document.getElementById(VAR_ID);
    var o = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            document.title = "opop";
        });    
    });
    var c = { attributes: true, childList: true, characterData: true }
    o.observe(t, c);
    

    с предсказуемым результатом. Если кто знает что я понял не так?



  • работает в консоли как я бы и хотел, в екшенах при каждой загрузке и яваскрипт не получилось.