Особенности разработки браузерных расширений для single...

12
Борис Мосунов facebook.com/mossounov linkedin.com/in/borismossounov anotherguru.me Особенности построения дополненной реальности для Single Page Application

Upload: chaykaborya

Post on 14-Apr-2017

179 views

Category:

Software


2 download

TRANSCRIPT

Борис Мосуновfacebook.com/mossounov

linkedin.com/in/borismossounovanotherguru.me

Особенности построения дополненной реальностидля Single Page Application

Борис Мосуновfacebook.com/mossounov

linkedin.com/in/borismossounovanotherguru.me

Особенности построения дополненной реальностидля Single Page Application

илиsetInterval MutationObserver

Проблема:

Content Script & Styles загружаются один раз, дополняя страницу.

В Single Page Application страница изменяется без перезагрузки.

Нужно выбрать оптимальный механизм дополнения реальности.

Вариант 1. window.setInterval()

tТем временем в неактивных вкладках….

Вариант 1. window.setInterval()

Чем больше вкладок, тем больше нагрузка.

Нагрузка не зависит от того, работает пользователь или нет.

Чем меньше таймаут, тем нагрузка больше.

Чем больше таймаут, тем заметней лаг между изменением страницы и ее дополнением.

Вариант 2. MutationObserver

t

в теории:

в реальности:

в остальных вкладках:

но кое где:

Изменения обычно происходят пачками, в цикле.

Нагрузка не зависит на прямую от количества вкладок.

Где-то в Single Page Application может через интервал происходить изменение DOM дерева.

Обработчик изменения страницы сам может порождать изменение страницы, можно свалиться в бесконечный цикл.

Вариант 2. MutationObserver

setInterval MutationObserver

setTimeout &MutationObserver

Вариант 3. MutationObserver + setTimeout

t

в остальных вкладках:

но кое где:

200 ms 200 ms 200 ms 200 ms 200 ms

200 ms 200 ms 200 ms 200 ms 200 ms 200 ms 200 ms 200 ms

Обработка изменений страницы происходит после того как прошла пачка изменений.

Неактивные вкладки чаще всего не создают дополнительной нагрузки.

Нужны ровные руки, чтобы реализовать правильно.

Вариант 3. MutationObserver + setTimeout

Вопросы?