Ответ 1
"display: none" является вашим другом
Если вы используете display:none
в теге GIF html <img>
, GIF вообще не будет отображаться и не будет использовать ресурсы центрального процессора или графического процессора. Для пояснений см. this и .
Используйте Javascript для приостановки анимационного GIF
Если по какой-либо причине display:none
не заполняет счет, libgif-js и x-gif Библиотеки Javascript предоставляют возможность программно приостанавливать и перезапускать анимированные GIF файлы. Эти библиотеки также предлагают множество других функций, которые вам, вероятно, не интересуют. См. Ответы на этот вопрос SO для дальнейших заметок об этих библиотеках.
Используйте MP4 внутри тега HTML5 Вместо анимированного GIF.
Чтобы повысить скорость загрузки страницы и снизить нагрузку на процессор и графический процессор, переведите ваш анимированный GIF в видео MP4, что требует значительно меньшего объема памяти и значительно меньшего использования CPU/GPU. См. Следующий отрывок из статьи Как элегантный код может повредить производительность HTML5 Джордж Лоутон:
Анимированные GIF файлы растут в популярности на многих сайтах из-за их небольшого размера файла. Однако их следует избегать, когда это возможно (...) Используйте видео для анимации, а не GIF, чтобы достичь хорошей производительности. Когда браузер пытается анимировать GIF, он использует изменение изображений для рендеринга объектов. Несмотря на то, что файлы могут быть небольшими, они дают им налоги на процессоры и память. Например, для анимированного GIF на 200 КБ может потребоваться гигабайт внутренней памяти для рендеринга. Форматы видео гораздо проще в рендеринге, могут лучше использовать графический процессор и упростить вывод данных кадра после его представления.
Согласно статье "Оптимизация анимированных GIF файлов путем преобразования в HTML5-видео" Билли Хоффман,
Сегодня более 90% настольных браузеров поддерживают видео MP4... Для современных мобильных устройств поддержка приближается к 100%...
Наши исследования показали, что анимированные GIF файлы обычно в 5-10 раз больше, чем правильно закодированные видео MP4. Это различие означает, что GIF не только тратят значительные объемы полосы пропускания, они загружаются медленнее и создают плохой пользовательский интерфейс.
Фактически, преобразование анимированных GIF в видео MP4 - такая потрясающая оптимизация, что именно такие сайты, как Twitter и Facebook, и imgur делают, когда вы загружаете анимированный GIF. Они молча конвертируют его в видео MP4 и отображают это вместо этого.
Вы можете использовать бесплатную утилиту ffmpeg, чтобы перевести ваш анимированный GIF в видео MP4. Затем измените свой HTML:
<img src="video.gif" alt="" width="400" height="300" />
:
<video autoplay="autoplay" loop="loop" width="400" height="300">
<source src="video.mp4" type="video/mp4" />
<img src="video.gif" width="400" height="300" /></video>
Это автоматически запустит видео и зациклирует его, не показывая никаких элементов управления видео. Это дает тот же опыт, что и анимированный GIF, но быстрее и меньше. Обратите внимание, что мы все еще имеем
<img>
, указывающий на исходный анимированный GIF внутри тега<video>
. Таким образом, в маловероятном случае, когда браузер посетителей не поддерживает видеоролики MP4, анимированный GIF будет отображаться, и пользователь все еще испытывает содержание.
Если вы все еще хотите проверить
Если вы действительно хотите доказать, что ваш анимированный GIF не вызывает утечки на вашем CPU/GPU, вы можете использовать умный метод, описанный Дэвидом Корвозиером в своей статье, Эффективное измерение частоты кадров браузера с помощью CSS:
Принцип довольно прост: - вставьте очень простой анимированный элемент CSS на странице, - вычислите вычисленное положение этого элемента через равные промежутки времени, - каждую секунду, прошедшую, подсчитайте количество разных позиций, занятых элементом.
Довольно тупой, мм? Ну, может быть, но это дает удивительно точные результаты, на самом деле...
Вы можете скачать его код Javascript здесь. Демоверсия только оценивает загрузку из анимации CSS, но вы можете добавить свой GIF к каждому <div>
, созданному в его коде, чтобы увидеть его влияние на тест.
При выполнении тестового теста для анимации вы можете немного помешать вашему компьютеру, отключив аппаратное ускорение, которое перенесет операции рендеринга с GPU на CPU. Это может помочь вам более легко заметить влияние анимации на производительность.