Pull to refresh

Comments 32

Это теперь музыка онлайн-радио или любых музыкальных сервисов будет сразу затыкаться если я переключусь на другую вкладку? О_0

Нет, об этому уже писали ранее. Если проигрываются звуки на странице, то вкладка блокироваться не будет
Т.е. можно будет создать музыку с тишиной, чтобы вкладка не заблокировалась? :)
помнится если включить музыку, но выключить звук, то иконка воспроизведения музыки пропадает на самом табе. По идее не сработает)
Музыка с тишиной — это не выключенный звук.
Да, я не так понял предложение. Ошибся. Хотя как можно сделать музыку с тишиной, тоже интересно)
Ага, во флеше так делали. Например люди писали веб клиент к бирже, и клиенты любят открыть по 100 вкладок, чтобы столько сокетных соединений не висело и всё это не тормозило одна флешка была главной и содержала коннект к серверу, в другие по localConnection у неё что нужно забирали. Потом флеш начал стопориться на неактивной вкладке и всё встало. Так вот музыка поднимала fps обработчика event-loop до 8

Конечно, нет, "Ограничение также не распространяется на фоновые вкладки, в которых используется API для воспроизведения звука, WebSockets или WebRTC". Это уже реализовано во некоторых браузерах, вот и chrome с оптимизацией подтянулся (пока что кривовато).

UFO just landed and posted this here
Подскажите, если у меня сейчас аяксом раз в минуту через setTimeout отправляется запрос на сервер, получающий данные, то через что конкретно теперь это делать?

… через WebWorker? Держать данные в воркере, держать логику переодических обновлений там же. С целевой страницы (когда она живая) делать запросы к воркеру о получении актуальных данных. Судя по caniuse, актуальные браузеры поддерживают воркеры, но не могу говорить нюансах, потому что работал с ними только в Хроме.

почему-то мне казалось что XMLHttpRequest не доступен в WebWorker, спасибо что развеяли мое заблуждение.
UFO just landed and posted this here
UFO just landed and posted this here

К сожалению коллбэки, которые передаются в системные API в Workers вынести нельзя. Потому что само API их будет вызывать. И API в фоновых вкладках тоже затормаживается, то есть, например, IndexedDB тоже работает медленнее.
Одних *Worker-ов недостаточно, чтобы решить проблему.

UFO just landed and posted this here
IndexedDB есть в воркерах.

API конечно есть, но оно же ведь в другом потоке работает.

Если я не ошибаюсь, Safari тоже с фоновыми вкладками работает подобным образом.

Да, в Safari и вдруг браузерах есть похожие оптимизации.

Гм, а я думал, почему всякие онлайн-банкинги так любят ссылки вида javascript:, как следствие полную невозможность открыть новую вкладку, оказывается и это workaround, дабы не случилось что-то, а пользователь потом не удивлялся (читать: возмущался/подавал в суд/ваш вариант).

В подавляющем большинстве случаев, ссылка вида javascript:... или #doAction говорит о том, что над страницей работала команда специалистов, неподозревающих о существовании тега <button>.

Я подобных нюансов не знаю — не веб разработчик. В любом случае, не понятно, почему все (или почти все, проверить нужно) ссылки внутри (т.е. ссылки между разделами, а не внешние) банкингов AlfaClick и ВТБ24 имеют такой вид. Теперь, по крайней мере, есть одно объяснение, возможно связанное с Safari.

UFO just landed and posted this here

Боюсь, что придётся перелопачивать; но думаю, меньше 10ти процентов.

А ещё бываю сайты, на которых при открытии новой вкладки в старой открывается реклама с другого сайта. И как приятно зная это старую вкладку закрыть без напряга для браузера.

Подскажите (вопрос к автору), а при уходе с вкладки выполняется unload? Возможно поможет Navigator.sendBeacon().

unload — нет. Но можно подписаться на visibilitychange. При этом я не уверен, будет ли он успевать выполняться.

Если будет дополнительная информация о тестировании этой фичи — поделитесь.

Сделал маленький тестик (index.html):


<script>
document.addEventListener("visibilitychange", function() {
  navigator.sendBeacon('http://0.0.0.0:8080/hello?s=' + document.visibilityState, '');
});

window.addEventListener("unload", function() {
  navigator.sendBeacon('http://0.0.0.0:8080/hello?s=unload', '');
});
</script>

php -S 0.0.0.0:8080 -t ./

И смотрите какие запросы падают в консоль при разных действиях.


В хроме 56.0.2924 работает нормально, пока нет воможности потестировать в последнем, подскажите работает ли у вас?

Этот пример работает без проблем:


PHP 5.6.28 Development Server started at Thu Mar 23 14:00:24 2017
Listening on http://0.0.0.0:8080
Document root is /Users/dkaigorodov/phproot
Press Ctrl-C to quit.
[Thu Mar 23 14:00:38 2017] 127.0.0.1:61159 [200]: /
[Thu Mar 23 14:00:38 2017] 127.0.0.1:61161 [404]: /favicon.ico - No such file or directory
[Thu Mar 23 14:00:47 2017] 127.0.0.1:61182 [200]: /hello?s=hidden
[Thu Mar 23 14:00:49 2017] 127.0.0.1:61196 [200]: /hello?s=visible
[Thu Mar 23 14:00:50 2017] 127.0.0.1:61201 [200]: /hello?s=hidden
[Thu Mar 23 14:00:58 2017] 127.0.0.1:61234 [200]: /hello?s=visible
[Thu Mar 23 14:00:58 2017] 127.0.0.1:61235 [200]: /hello?s=hidden
[Thu Mar 23 14:00:59 2017] 127.0.0.1:61240 [200]: /hello?s=visible
[Thu Mar 23 14:01:02 2017] 127.0.0.1:61253 [200]: /hello?s=hidden
[Thu Mar 23 14:01:02 2017] 127.0.0.1:61254 [200]: /hello?s=unload
Sign up to leave a comment.

Articles