Лого SiteHere.ru

Как сделать воспроизведение GIF по клику — ускоряем загрузку сайта путем загрузки GIF при клике

Ускоряем загрузку сайта путем загрузки GIF при клике

Тему оптимизации сайта сейчас затрагивают все чаще и чаще. И не зря, так как веб становится все более быстрым, а информации становиться все больше. Только посмотрите на количество сервисов оптимизации изображений, CSS стилей, JS стилей появилось в последнее время. Добиться быстрой загрузки сайта стало куда проще, чем это было раньше. Но даже здесь не все решается простыми сервисами. Сегодня мы рассмотрим простой способ загружать GIF только при клике.

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

Так как статья относится именно к GIF изображениям, то рекомендую изучить статью по созданию GIF онлайн:

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

СМОТРЕТЬ ДЕМОСКАЧАТЬ ДЕМО

Плюсы и минусы загрузки GIF при клике

Чтобы наглядно оценить все "за" и "против" данного способа я представил все наглядно в таблице:

Критерий Обычная вставка GIF Загрузка GIF по клику
1. Необходимость подключения jQuery нет да
2. Необходимость дополнительного JS функционала нет да
3. Необходимость дополнительных телодвижений (создание preview изображения) нет да
4. Увеличение скорости загрузки в 10-и раз нет да

Первый пункт немного спорный, потому что можно ведь было написать скрипт на чистом Javascript, тогда он бы отсутствовал, но вот остальные точно останутся в любом случае.

Пока что не до конца понятно в чем же тогда смысл данного способа, если же у него столько минусов. Но вот последний плюс для многих (и для меня в том числе) будет намного важнее всех минусов, которые указаны выше. Чтобы добиться хорошей скорости загрузки — необходимо кое-что сделать.

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

Критерий Обычная вставка GIF Загрузка GIF по клику
Объем всех загружаемых браузером файлов в первый раз 8413,95 Kb 185,69 Kb

Конкретно в данном примере отличия колоссальные!

Что нужно сделать до начала внедрения кода…

Что нужно сделать до начала внедрения кода

Допустим, вас воодушевил данный способ и вы понимаете, что на вашем сайте находится большое количество GIF изображений, а вот скорость загрузки страдает. И вы решили внедрить данный функционал у себя на проекте (возможно будущем). Есть небольшая предварительная процедура, при которой нужно подготовить preview изображения, которые необходимо показывать как только загрузился сайт. То есть это именно те изображения, которые пользователь видит пока не кликнул на кнопку Play.

Что можно поставить на preview изображение? Здесь есть 2 варианта: либо делать для каждого GIF изображения свое preview, которое является его первым кадром, либо сделать одно изображение, которое будет использоваться на всем сайте, вне зависимости от GIF изображения. Но, решить как будет лучше для вашего проекта, вам необходимо самостоятельно.

Итак, вы подготовили все preview изображения для каждого GIF изображения и сейчас готовы внедрить функционал, тогда переходим к самому интересному блоку! 🙂

Блок "СКОПИРОВАЛ-ВСТАВИЛ"

Здесь все будет действительно просто, а если нет, тогда просто скачайте демо пример и посмотрите как все устроено внутри и сделайте соответствующие действия для своего проекта.

Начнем, как обычно, с разметки:

1 этап. HTML разметка

HTML КОД
1
2
3
<div class="gif-with-play">
    <img src="img/self-portrait.jpg" alt="Self Portrait" data-srcgif="img/self-portrait.gif">
</div>

ВАЖНО: все изображения должны находиться в блоке с классом "gif-with-play". И второе важное замечание: необходимо указать адрес до preview изображения в атрибуте "src" и ОБЯЗАТЕЛЬНО указать адрес до GIF изображения в атрибуте "data-alt".

Здесь все! Идем дальше…

2 этап. CSS стили

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

CSS КОД
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
.gif-with-play {
  position: relative;
  background: url('../img/loading.gif') transparent no-repeat center center;
}
 
.gif-with-play:hover {
  cursor: pointer;
}
 
.gif-with-play:hover:before {
  background-color: rgba(255,255,255,.56);
}
 
.gif-with-play:after,
.play.gif-with-play:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  height: 120px;
  width: 120px;
  -webkit-background-size: cover;
  background-size: cover;
  z-index: 10;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
  opacity: 1;
}
 
.gif-with-play:after {
  background-image: url('../img/player-buttons/play_button.svg');
}
 
.play.gif-with-play:after{
  background-image: url('../img/player-buttons/stop_button.svg');
}
 
.play.gif-with-play:not(:hover):after {
  opacity: .35;
}
 
.gif-with-play:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background-color: rgba(255,255,255,.7);
  z-index: 10;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
  opacity: 1;
}
 
.play.gif-with-play:before {
  background-color: rgba(255,255,255,0);
}
 
.gif-with-play img {
  opacity: 1;
  -webkit-transition: all .35s ease;
  -o-transition: all .35s ease;
  transition: all .35s ease;
}
 
.gif-with-play.loading-hide img {
  opacity: 0;
}
 
.loading-hide.gif-with-play:after,
.loading-hide.play.gif-with-play:after{
  opacity: 0;
}
 
@media screen and (max-width: 768px) {
  .gif-with-play:after,
  .play.gif-with-play:after {
    height: 60px;
    width: 60px;
  }
}

Это самый базовый набор стилей, чтобы показать кнопку Play. Я их написал только для того, чтобы вы понимали принцип и смогли изменить кнопку (да и любые стили) под себя и свой проект. Если вы заметили, то для GIF изображения, которое будет подставлено с помощью JS вместо preview, блоку-контейнеру (в нашем случае блоку с классом "gif-with-play") добавляется класс "play".

Кто-то скажет, что можно было добавить дополнительные теги в HTML разметку и к ним привязать событие воспроизведения и остановки GIF. Но я мне нравится формат с псевдоэлементами :before и :after.

3 этап. Javascript

Первым делом необходимо подключить библиотеку jQuery. А затем расположить ниже следующий скрипт:

JAVASCRIPT КОД
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(function($) {
 
  $('.gif-with-play').on('click', function() {
 
    var $this   = $(this),        
        $img    = $this.children('img'),
        $imgSrc = $img.attr('src'),
        $imgSrcgif = $img.attr('data-srcgif'),
        $imgExt = $imgSrcgif.split('.');
 
    if($imgExt[1] === 'gif') {
      $this.addClass('loading-hide');
 
      $img.attr('src', $img.data('srcgif')).attr('data-srcgif', $imgSrc);
 
      $($img).load(function(){
        $this.removeClass('loading-hide');
      });   
    } else {
      $img.attr('src', $imgSrcgif).attr('data-srcgif', $img.data('srcgif'));
    }
 
    $this.toggleClass('play');
 
  });
 
})(jQuery);

Для владельцев WordPress

Для вас есть отличное готовое решение в виде плагина для WordPress. Плагин называется "WP GIF Player". Скачать его можно здесь — скачать плагин "WP GIF Player".

Основные преимущества и возможности плагина "WP GIF Player":

  • "Проигрывание" одновременно только одно изображение GIF
  • Автоматическое создание изображений для превью GIF (выше нам необходимо было это делать самостоятельно)
  • GIF изображения добавляются очень легко, с помощью одной кнопки
  • Есть возможность параллельной загрузки GIF изображений
  • Можно выставить ограничение на максимальное разрешение GIF изображения

Для владельцев WordPress это хорошее решение, потому что постоянно проделывать все действия вручную может занять очень много времени, а свой плагин писать — это не каждому под силу.

Вывод

Сейчас GIF изображения — это отличный способ объяснить самый важный момент. Также многие документации делаются с помощью GIF изображений, так как можно наглядно показать использование какого-либо инструмента локально или с помощью горячих клавиш.

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

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

Успехов!

С Уважением, Юрий Немец

12 комментариев к записи
  • leon9208

    Полезная статья, но мне тоже интересно было бы узнать как автоматически генерировать превью из GIF-анимации

     
  • Диана

    А если просто вставить гифку в html-код, то она не будет проигрываться?

     
    • Юрий Немец

      Здравствуйте, Диана! Будет проигрываться, но здесь речь идет об ускоренной загрузке страницы, так как GIF-ка большая, и если она будет загружаться сразу, то это сильно увеличит время загрузки.

       
      • Диана

        Спасибо, Юрий!

         
      • leon9208

        Здравствуйте, спасибо за ваш труд, очень классные и полезные примеры. Я сделал немного другим способом, без тега img, у меня замена jpg на gif происходит в стилях, через смену свойств background-image. Но я никак не могу додумать, как сделать прелоадер в моём случае, чтобы перед полной загрузки gif файла была анимация прелоадера? Я только начинаю изучать js/jQuery, поэтому пока не на всё способен ))) 
        Вот ссылка на пример: http://codepen.io/leon9208/pen/rjpZXP?editors=0010

        Спасибо еще раз! ) 

         
  • Виктор

    [2]Полезная статья, но мне тоже интересно было бы узнать как автоматически генерировать превью из GIF-анимации

     
  • Евгений

    Хм… У меня нормально заработало только когда поменял строку в scripts.js

    $img.attr('src', $imgSrcgif).attr('data-srcgif', $img.data('srcgif'));

    на

    $img.attr('src', $imgSrcgif).attr('data-srcgif', $imgSrc); 

    Причем в демо примере работает всё  без изменений в коде… 

     
  • Ната

    Спасибо за материал. Вроде всё работает. Но после смены превью, перед загрузкой гифки, проходит несколько секунд вне зависимости от размера файлов, места расположения скрипта в коде и наличия стилей css. Как будто что-то заставляет задерживаться картинку.

    И эти 2-4 секунды, конечно, убийственно долго длятся, любой пользователь подумает, что ничего не грузит.

    Проверяли в разных браузерах, на разных устройствах.

    Подскажите, пожалуйста, в чем может быть причина?

     
  • Дмитрий Бойко

    Проверил работает, спасибо огромное за статью!!!

     
  • Андрей

    WP GIF Player плагин убрали с вордпресса, есть что то похожее по функционалу? Искал ничего не нашел или может где этот плагин скачать еще можно?

     

     
    • firsss

      Такая-же беда. Начал изучать WP-5.1 для создания медиа блога и обнаружил что для гиф больше нет плагинов запускающих и останавливающих анимацию картинки. GIF Animation Preview — на гитхуб вроде есть обновления этого года но у меня он всёравно не работает так как требуется. Пока приходится извращаться с Onclick.

       
  • Серьгей

    Тема не раскрыта полностью. Например чтобы плагин «WP GIF Player» заработал нужны дополнительные действия (здесь ничего этого не описано).Просто скачал и установил . Как обычный плагин. Так он не работает. Да и читая статью, такое чувство что статья переведена с иностранного языка яндекс переводчиком. Вроде написано много , но суть не раскрыта.

     

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *