@VegasChickiChicki

Каким образом можно кешировать изображения?

Искал информацию в интернете ,но ничего дельного не нашел ,везде либо на jquery ,либо сотник строк непонятного когда без объяснения. Не могли вы привести пример ,как мне взять массив фотографий и кешировать его?
  • Вопрос задан
  • 356 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
О ,я как раз собирался уточнить это) Суть в том ,что на сайте есть достаточно много картинок ,и про проверке сайта на скорость загрузки ,мне посоветовало "кэшировать изображения" ,я начитался в интернете ,что можно начать загрузку всех изображений сразу ,до их открытия пользователем ,путем кэширования. Т.е. страницы открылась ,пользователь еще на самом верху ,а изображения в других местах страницы уже грузятся и когда он до них доходит ,они уже загружены ,как то так )

Насчет проверки на скорость загрузки - имеется в виду как раз отдавать правильные заголовки для кэширования с сервера, что Вам уже подсказали в комментариях к вопросу.

Ну а насчет предварительной загрузки изображений до показа их пользователю, понадобится список таких изображений, которые нужно предзагрузить. Сразу скажу, что грузить таким образом изображения, которые уже есть на странице смысла нет, но вот изображения для всяких модалок таким образом грузить вполне себе резонно:
// сделаем функцию, ждущую загрузку основной страницы,
// чтоб не мешать ей при загрузке дополнительных картинок:
function waitWindowLoad() {
  if(document.readyState === 'complete') {
    return Promise.resolve();
  }
  return new Promise(resolve => {
    const listener = () => {
      window.removeEventListener('load', listener);
      resolve();
    };
    window.addEventListener('load', listener);
  });
}

// массив url подгружаемых картинок
[
  '/images/1.png',
  '/images/2.png',
  '/images/3.png'
].reduce((promise, url) => promise.then(() => new Promise(resolve => {
  // грузим картинки по очереди
  const img = new Image();
  img.onload = img.onerror = resolve;
  img.src = url;
})), waitWindowLoad());
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Eridani
@Eridani
Мимо проходил
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы