Загрузка Фотографий В Фоновом Режиме. Javascript-Модуль

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

Об одном из таких трюков и пойдет речь дальше.



Проблема:
Сайт состоит из одной страницы, на которой вся информация генерируется с помощью Ajax-запросов и большого количества скриптов.

А с ростом функционала увеличивалось количество макетов и изображений, которые изначально включались в загружаемую страницу.

Если к этому добавить функцию прогнозирования действий пользователя и загрузки контента в фоновом режиме, то ситуация с начальной отрисовкой страницы и временем отклика интерфейса становится совсем печальной.



Решение:
Одной из мер по решению проблемы было написание модуля, который бы не только загружал картинки по мере необходимости, но и устанавливал плейсхолдеры, если по каким-то причинам загрузка не удалась.



Загрузка фотографий в фоновом режиме.
</p><p>
 JavaScript-модуль



Когда вам нужен скрипт:
  • Ваш сайт сложный
  • Загрузка информации с помощью ajax
  • Множество макетов, которые могут быть не показаны пользователю.

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



Как это работает:
  • У вас есть какая-то скрытая страница с картинками.

  • Вместо этого загружается изображение размером 1 пиксель.

  • Скрипт пробегает все картинки, разделяя их на группы.

  • Если у вас есть свободное время без загруженности, вы можете использовать скрипт для загрузки картинок определенной группы (если предполагаете, что они могут понадобиться пользователю в ближайшее время).

  • Если пользователь запрашивает вашу скрытую страницу, вы показываете изображения.

  • Если вы указали неправильный адрес изображения, заполнитель просто останется размером в 1 пиксель, а изображение не изменится.

Скачать: демо , сам модуль

Преимущества:
Модуль написан на родном JavaScript. Для работы не требуются никакие библиотеки.

Сжат с помощью Google Compressor до 1,5 КБ.

Поддерживает цепочку.

То есть методы можно вызывать так: lazyLoadingImages.show("1").

load("2").

load("3"); При желании вы можете передать ссылку на свой объект или переменную в модуль и не создавать еще одну глобальную переменную.



Использование:
Вставьте в заголовок страницы:
  
  
  
   

<script defer src="js/lazyLoadingImages.min.js"></script>

Опишите изображения в документе следующим образом:

<img src=".

/images/empty.png" url=".

/images/1200.jpg" type="group1" />

Где: src=".

/images/empty.png" — адрес изображения-заполнителя размером 1 пиксель url=".

/images/1200.jpg" - адрес исходного большого изображения type="group1" - идентификатор группы, необязательный параметр

Загрузка фотографий в фоновом режиме.
</p><p>
 JavaScript-модуль



Интерфейс
При событии DOMContentLoaded (окончание загрузки DOM) переданному в модуль глобальному объекту присваивается метод lazyLoadingImages (по умолчанию это window.lazyLoadingImages).

ленивыйLoadingImages.update() — обновит список изображений и запомнит их URL для загрузки оригинальных изображений.

Этот метод вызывается автоматически при инициализации модуля.

Может быть полезно, если изменился DOM страницы.

lazyLoadingImages.load(тип) — загрузит картинки определенной группы (параметр type указывает какой именно).

Параметр типа является необязательным.

По умолчанию он загружает изображения, для которых не указан идентификатор группы.

lazyLoadingImages.show(тип) — показывать картинки конкретной группы (параметр type указывает какой именно).

Параметр типа является необязательным.

По умолчанию отображаются изображения, для которых не указан идентификатор группы.

УПД: Из-за того, что rghost недоступен ссылка на гитхаб MechanisM спасибо за замечание, я переименовал параметры.

Теперь URL-адрес данных и тип данных.



О заглушке изображения
При вставке картинок в документ (Например, отображение длинного списка игроков через внутренний HTML) можно добавить небольшую хитрость:
  • Все изображения вставляются со свойством Visibility = Hidden (или еще лучше Display: none)
  • Мы прикрепляем событие onload ко всем изображениям
  • Если происходит загрузка, удалите видимость; если нет, оставьте все как есть.

Получается, что если на сервере нет картинки, то на ее месте у нас просто белый квадрат. Еще рекомендую в стилях задать размер всех картинок, чтобы если остался просто белый квадрат, то он занимал необходимую площадь.

При необходимости в этой же функции можно вставить или убрать alt и заголовок изображения в моменты до и после загрузки.

CSS

.

visibility { visibility: hidden; }

JavaScript

utils.showAfterLoading: function(node) {

Теги: #JavaScript #высокая нагрузка #сложная верстка #разработка веб-сайтов #JavaScript

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.