JSLazyLoading — это плагин для отложенной загрузки и мультивывода изображений (lazy load), предназначенный для оптимизации клиентской производительности. Плагин работает на чистом JavaScript и не зависит от внешних библиотек, таких как jQuery. Принцип отложенной загрузки заключается в том, что при отрисовке страницы загружаются только те изображения, которые находятся в области видимости браузера. Изображения не загружаются до тех пор, пока пользователь не пролистает страницу до места их видимого нахождения в документе.
С помощью опции мультивывода вы можете динамически выводить Retina изображения или, наоборот, выводить уменьшенные, облегчённые изображения для мобильных устройств. Режим Retina позволяет загружать «тяжёлые» изображения по мере необходимости, при этом скорость загрузки страницы не будет зависеть от готовности загрузки изображений. Это может значительно ускорить работу вашего сайта, особенно при медленном интернет-соединении, и сделать удобной загрузку изображений высокого качества на экранах Retina. Если же вам необходимо максимальное ускорение, то плагин может работать в другом режиме, при котором пользователю мобильных устройств будут выводиться уменьшенные, «облегчённые» аналоги изображений. Плагин поддерживается большинством современных и старых браузеров, совместим с AJAX навигацией.
Установка и использование плагина JSLazyLoading для web
Описание рабочих параметров плагина
- docReady (boolean)
- Использовать или нет встроенную функцию docReady, чтобы запустить плагин в момент завершения загрузки DOM (true, установлено по умолчанию). Если установлено значение false, плагин запустится немедленно, как только был создан экземпляр объекта.
- dataAttribute (string)
- Имя data-* аттрибута, содержащего ссылку на оригинальное изображение. Значение по умолчанию — "data-src".
- sequentialLoading (null, integer)
- Последовательная принудительная загрузка (значение по умолчанию — null, отключено). Опция позволяет загружать изображения, которые находятся за пределами области видимости, через интервал. Пока посетитель просматривает страницу, изображения могут загружаться с интервалом, установленным в значении данного параметра (количество миллисекунд, integer). Вы можете установить также нулевое значение — в данном случае все изображения загрузятся немедленно, друг за другом.
- placeholder (string)
- В соответствии с HTML стандартами, изображение должно иметь обязательный аттрибут “src”. В режиме отложенной загрузки данный аттрибут должен содержать изображение-заглушку. Данный параметр определяет путь к файлу изображения-заглушки или строку данного изображения в формате base64 (по умолчанию устанавливается автоматически).
- loaderImage (null, string)
- Путь к файлу изображения-загрузчика (loader), которое будет показано во время загрузки оригинального изображения (по умолчанию устанавливается автоматически). Чтобы отключить изображение-загрузчик, установите null в качестве значения.
- backgroundColor (null, string)
- Цвет фона изображения-заглушки на время загрузки оригинального изображения (null — прозрачный фон, установлено по умолчанию). Чтобы изменить фон, установите цвет в качестве значения, например "#000".
- fadeInEffect (boolean, string)
Появление изображения путём плавного изменения его прозрачности. Вы можете установить значения true (установлено по умолчанию) и false, чтобы включить/выключить данный эффект на всех устройствах, а также строку со значением "desktop", чтобы включить его только для настольных браузеров.
Эффект плавного возникновения основан на CSS3 переходах и доступен только для браузеров, поддерживающих CSS3. Основной целью отложенной загрузки изображений является улучшение производительности, поэтому нецелесообразно реализовывать данный эффект при помощи ресурсоёмких рекурсий или интервальных циклов. В связи с этим эффект плавного возникновения не доступен для устаревших браузеров.
- fadeInDuration (integer)
- Длительность эффекта плавного возникновения в миллисекундах (значение по умолчанию — 400).
- fadeInPreserveOpacity (boolean)
- Параметр эффекта плавного возникновения: сохранить или не сохранять оригинальную прозрачность изображений. Если установлено значение false, то в момент загрузки изображения для свойства “opacity” будет установлено максимальное значение, т.е. 1 (работает быстрее). Если установлено значение true (установлено по умолчанию), то для свойства “opacity” будет установлено значение, коррелирующееся с правилами ваших стилей CSS. Если на вашем сайте отсутствуют прозрачные (полупрозрачные) изображения, то для улучшения производительности на стороне клиента рекомендуется отключить данную опцию.
- softMode (boolean)
Параметр включает или отключает мягкий режим загрузки изображений (отключён по умолчанию). Так как изображение при отложенной загрузке не содержит оригинальную ссылку в аттрибуте “src”, браузеру посетителя не известны ширина и высота данного изображения. В результате, содержимое страницы может “прыгать” во время загрузки изображения, так как браузер меняет изображение-заглушку на оригинальное изображение. Чтобы предотвратить данный эффект, вы можете указать в стилях CSS высоту изображения, однако это может быть затруднительно в некоторых случаях, например при адаптивном, «резиновом» макете сайта.
С помощью плавного режима загрузки вам не обязательно устанавливать в стилях высоту ваших изображений — она будет установлена динамически, в соответствии с шириной контейнера. Мягкий режим загрузки доступен только для изображений с установленными аттрибутами “width” и “height” (плагин вычисляет размеры изображения согласно значениям данных аттрибутов).
- ajaxListener (boolean)
- Перезагрузка плагина при событии AJAX, при котором браузер посылает запрос HTTP. (false — отключено, установлено по умолчанию). Назначение данной опции заключается в необходимости включить новые изображения в рабочую коллекцию плагина для их отложенной загрузки (будут вовлечены только изображения с установленными data-* аттрибутами). Для разработчиков: альтернативный путь включения новых изображений в рабочую коллекцию плагина — использование public метода “refresh” (см. раздел ниже).
- limit (integer)
- Изменяя этот параметр, вы влияете на количество изображений, проверяемых в цикле. Значение по умолчанию (0), означает, что только одно изображение проверяется за одну операцию. Как только это изображение оказывается в области видимости, плагин его загружает и переходит к следующему изображению. Чем меньше значение данного параметра, тем лучше производительность, однако если ваш сайт имеет сложную раскладку, то изображения могут не загружаться. В этом случае увеличьте значение данного параметра до числа, при котором сбой в загрузке не будет выявляться или установите большое значение (например, 1000), если вам нужно убрать предел итераций.
- rectangularScope (boolean)
Данный параметр определяет геометрию области видимости. Если установлено значение true, то данная область будет иметь прямоугольные границы, следовательно, при загрузке изображений учитывается верхняя, нижняя, левая и правая границы видимой области окна — в данном случае изображения загружается только при условии, если они находятся в прямоугольной области видимости. Если установлено значение false, изображения загружаются сразу, как только они оказываются выше нижней границы видимой области окна.
Примечание: установка прямоугольных границ области видимости в определённой степени может снизить производительность на стороне клиента в случае, если на странице размещено большое количество изображений, вовлечённых в отложенную загрузку, так как лимит итераций (предыдущий параметр) убирается автоматически.
- rangeY (integer)
- Если вы хотите, чтобы изображения загружались раньше того момента, как они окажутся в области видимости, используйте данный параметр. Например, установка значения 300 означает, что изображения будут загружаться на 300 пикселей раньше, чем они окажутся в области видимости.
- rangeX (integer)
- Порог оси X доступен в случае, если параметр “rectangularScope” установлен как true.
- multiServing (boolean, string)
- Данная опция включает/отключает мультивывод изображений и задаёт его режим. Допустимые значения: false (отключено), "manual", "php", "apache" (см примеры ниже).
- multiServingType (string)
- Тип мультивывода: по ширине экрана или по плотности экрана (работает при условии, если опция “multiServing” включена). Допустимые значения: "width", "density". В первом случае мультивывод происходит в зависимости от ширины экрана. Во втором случае — в зависимости от плотности экрана.
- multiServeBreakpoints (object)
- Контрольные точки мультивывода изображений (работает при условии, если опция “multiServing” включена). См примеры ниже.
Мультивывод изображений
- Мультивывод изображений — это их динамическая подмена, которая определяется типом устройства пользователя. Доступно два способа мультивывода: в первом случае сервер отдаёт пользователю Retina изображения, но только при условии, если плотность его экрана больше или равна значению, установленному в настройках плагина в качестве контрольной точки. При втором способе плагин выводит уменьшенные аналоги изображений, если ширина экрана пользователя меньше или равна значению контрольной точки. Контрольных точек может быть несколько — в этом случае плагин выведет изображение, кореллирующееся с ближайшей контрольной точкой. Плагин осуществляет мультивывод вручную или автоматически. Ручной метод требует установки HTML аттрибутов изображений, в которых будут содержаться ссылки на изображения-аналоги. Автоматический метод выводит изображения только в том случае, если они существуют: сервер проверяет наличие изображений-аналогов по постфиксу файла, при этом исходный HTML изменять не нужно. При автоматическом режиме изображения-аналоги должны быть расположены в той же директории, что и оригинальные изображения.
- Ручной режим
- Автоматический режим
- Обработчики изображений
- Доступно два типа обработчика: обработчик Apache и обработчик PHP. Для пользователей Apache рекомендуется установить обработчик Apache: он работает быстрее обработчика PHP и не изменяет расширение файла – вывод изображений осуществляется при помощи внутренних перенаправлений сервера, поэтому время отклика сервера сводится к минимуму. Если вы не используете Apache или mod_rewrite, или же если при использовании обработчика Apache возникают ошибки, установите обработчик PHP.
- Примеры использования мультивывода изображений в различных режимах