2015-10-03 4 views
9

При использовании виджета загрузки Uploadcare я заметил, что сценарий Uploadcare продолжает перекрашивать тег HTML.Почему uploadcare перекрашивает html-тег каждые N мс?

Я не уверен, что перекраска является правильным термином, но вот что происходит: Проверка ChromedevtoolsHTML тег выделения, такое же поведение при добавлении/удалении атрибут элемента. И это, кажется, не заканчивается, оно просто продолжается и на каждом N мс. Вы можете проверить это на своей домашней странице Uploadcare.com, просто откройте devtools и посмотрите на тег HTML.

Кто-нибудь знает, почему это так? Что он звонит? Это вызовет проблемы с производительностью для мобильных пользователей?

+1

Они постоянно удаляют и добавляют атрибут id. Вы можете щелкнуть правой кнопкой мыши узел html и выбрать перерыв в модификациях атрибутов, чтобы подтвердить это самостоятельно. _Why_ они делают это, не уверен, если захотите, вы можете прорыть код, но для меня это просто звучит как хак. – Nit

+0

@ Ник хороший трюк! Какими бы ни были их причины, это очень назойливое, я не могу редактировать CSS-стили с помощью devtools, потому что он продолжает перекрашивать: | –

+0

Существует watch.js, который, кажется, запускает это (и постоянно публикует https://mc.yandex.ru/webvisor btw) –

ответ

8

Плагин Uploadcare ищет новые виджеты на странице каждые 100 мс. Это называется инициализацией в реальном времени. Внутри плагина используется jQuery (который использует механизм выбора Sizzle), и именно так работает Sizzle: он добавляет id элементам корневого элемента области поиска до запроса и удаляет его после. Вы можете проверить это на простом примере:

<script src="https://code.jquery.com/jquery-2.1.4.js"></script> 
<script> 
    setInterval(function() { 
    $.find('[attr]', document.documentElement); 
    }, 200); 
</script> 

Если вы хотите избежать щелчка, у вас есть два варианта. Вы можете отключить live initialization, добавив UPLOADCARE_LIVE = false; в код js. Или вы можете добавить любой настраиваемый атрибут id в тег html. Sizzle не изменит его.

В будущем мы планируем использовать MutationObserver для просмотра новых виджетов на странице.

+0

Любое обновление патча MutationObserver? Это сводит меня с ума. – Lee

+1

@ Теперь просто используйте один из этих методов, чтобы сохранить свое здравомыслие. использование 'ID' на верхнем html-элементе является самым простым. –

+0

Действительно, я сделал это, и это достаточно хорошее временное решение. – Lee

Смежные вопросы