LINUX.ORG.RU

Динамически менять favicon в фоновой вкладке (мигание; оповещения) - как это сделать без запроса на сервак?

 


0

1

Делаю так:


// HTML

<link rel="icon" href="/static/favicon.png" id="id_favicon">


// JS

let state = 0;
let elem = document.getElementById("id_favicon");
elem.href = "favicon_" + state + ".png";

JS-код смены иконки исполняется часто: раз в секунду: state может меняться с этой частотой.

Когда вкладка в фоне, то при смене иконки я вижу на серваке запрос на соответствующий файл (сервак отвечает 304 - «не поменялось, уходи»). При смене иконки у кучи клиентов на сервак летит куча таких запросов. Они вроде ничего не стоят, сервак тратит меньше микросекунды на каждый, но они бесят, засирают логи и вообще и не нужны. Я не хочу фичу «дизайнеры поменяли иконку и открытая страничка в фоне сама её подтянула» - клиенты перебьются без этого. Короче, как без запросов?

Я понимаю, что движок браузера не знает что ему запихнут в href и честно ходит за файлом, который указали. И вообще это раузмно с его точки зрения - при любом изменении этого атрибута пойти и проверить не поменялся ли файл. Но мне оно не надо.



Последнее исправление: igloev (всего исправлений: 4)

Ответ на: комментарий от igloev

Можно 1 раз выкачать через AJAX и перевести в base64 средствами JS.

KivApple ★★★★★
()

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

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Спасибо. Да, вот выше сказали про Cache-Control. У меня просто самописный HTTP сервак на C++, а там только ETag реализован)

igloev
() автор топика
// HTML

<link rel="icon" href="/static/favicon.png" id="id_favicon">


// JS

let state = 0;
let elem = document.getElementById("id_favicon");
elem.href = "favicon_" + state + ".png?t=" + (Math.random()).toString();
dem ★★
()
Ответ на: комментарий от dem

Этот ответ не чинит что просили (убирает запросы на сервак), а делает так чтобы запрос уж точно ушёл на сервак.

igloev
() автор топика
Ответ на: комментарий от igloev

Сервак кеширует запрос. А с ?t не кеширует. Запрос ВСЕГДА уходит если ЕСТЬ связь. Ответ 304 ясен - нет?

dem ★★
()
Ответ на: комментарий от igloev

ну сменить иконку сменить тег. в любом случает тег типа <link rel=«icon» Запрос будет в любом случае... Ну ЛИНК

dem ★★
()

Бесполезная хрень. На фавикон вообще никто не смотрит

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.