SlideShare une entreprise Scribd logo
1  sur  140
Télécharger pour lire hors ligne
Оптимизация
графики 

на практике
Тим Чаптыков
vk.com/tc
@chaptykov
60%
Сеть — количество запросов, размер
Производительность — рендер, память, время
Восприятие — приоритеты загрузки, заглушки
Оптимизация
размера
изображений
Утилиты 

для оптимизации
графики
01
Растровая графика
gifsicle
jpegtran
optipng — без потерь
pngquant — c потерями
Есть плагин для вашей
любимой системы
сборки
imageoptim.com
Векторная графика
github.com/svg/svgo
SVGOMG — web-app
grunt-svgmin
gulp-svgmin
mimoza-minify-js
svgo-osx-folder-action — OSX folder action
image-webpack-loader
postcss-svgo
svgo_bot — бот для Telegram
github.com/svg/svgo-gui
GZIP
Экспорт 

растровой
графики
02
Save for Web
File > Export > Save for Web (Legacy)
⌥⇧⌘S
Export As
File > Export > Export As
⌥⇧⌘W
JPEG — фотографии
PNG — «клипарты»
GIF — крошечные изображения, анимация
JPEG
Для большинства фотографий подойдет 75.
Артефакты будут видны на сложных текстурах
(например, шум).
Для ретины 51 при двукратном размере.
Всегда progressive.
#1
#1
PNG24
600×380, 56 KB
PNG24
Source image
54.35 KB
PNG24
Optimized
38.90 KB
PNG8
Optimized
23.62 KB
JPEG
Optimized
8.19 KB
–46.16 KB
—84.93%
Crop + Trim
File > Save As
⌘A → ⌘C → ⌘N → Enter → ⌘V
Чек-лист
— Изображение актуального размера
— Изображение обрезано точно по размеру (без
прозрачных или однотонных областей)
— Выбран подходящий формат
— Изображение удачно декомпозировано
#2
#2
PNG24
2204×1102, 1.2 MB
PNG24
43 KB
JPEG, 75
238 KB
PNG24
Optimized
1243.30 KB
PNG24+JPEG
2 images
282.73 KB
–960.57 KB
—77.26%
Экспорт SVG
03
Save As
File > Save As
⇧⌘S
Export
File > Export > Export As
Export for Screens
File > Export > Export for Screens
⌥⌘E
Asset Export
Clipboard
⌘C
Save As — для совместимости с Illustrator
Export — для экспорта файла
Export for Screens — для экспорта артбордов
Asset Export — для экспорта отдельных фигур
Clipboard — для быстрых экспериментов
Save As — для совместимости с Illustrator
Export — для экспорта файла
Export for Screens — для экспорта артбордов
Asset Export — для экспорта отдельных фигур
Clipboard — для быстрых экспериментов
Styling
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16">


<defs> 

<style> 

.a { 

opacity: 0.7; 

} 

.b { 

fill: #828a99; 

} 

</style> 

</defs> 

<g class="a"> 

<path class="b" d="<% … %>" /> 

</g>


</svg>
Internal CSS
Переопределение
стилей
Inline style
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16">


<g style="opacity: 0.699999988079071"> 

<path d="<% … %>" style="fill: #828a99" /> 

</g> 

</svg> 



Inline style
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16">


<g style="opacity: 0.699999988079071"> 

<path d="<% … %>" style="fill: #828a99" /> 

</g> 

</svg> 



WTF?
Presentation attributes
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 16 16">


<g opacity="0.7"> 

<path d="<% … %>" fill="#828a99" /> 

</g> 

</svg> 



Internal CSS — переопределение, большой размер
Inline style — проблемы с точностью и специфичностью
Presentation attributes
Internal CSS — переопределение, большой размер
Inline style — проблемы с точностью и специфичностью
Presentation attributes
Font
Images
Object IDs
Decimal
Minify
Responsive
https://css-tricks.com/
illustrator-to-svg/
<?xml version="1.0" encoding="UTF-8"?> 

<svg
width="14px" height="19px"
viewBox="0 0 14 19"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">


<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> 

<title>Combined Shape</title> 

<desc>Created with Sketch.</desc> 

<defs></defs> 

<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 

<g id="Custom-Preset" transform="translate(-8.000000, -3.000000)" fill="#D8D8D8"> 

<path d="M18.6923882,8.19238816 L18.6923882,5.69238816 L5.69238816,5.69238816
L5.69238816,10.6923882 L13.6923882,10.6923882 L13.6923882,18.6923882
L18.6923882,18.6923882 L18.6923882,8.19238816 Z" id="Combined-Shape"
transform="translate(12.192388, 12.192388) rotate(45.000000) translate(-12.192388,
-12.192388) "></path>


</g> 

</g> 

</svg> 

<?xml version="1.0" encoding="UTF-8"?> 

<svg
width="14px" height="19px"
viewBox="0 0 14 19"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">


<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> 

<title>Combined Shape</title> 

<desc>Created with Sketch.</desc> 

<defs></defs> 

<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 

<g id="Custom-Preset" transform="translate(-8.000000, -3.000000)" fill="#D8D8D8"> 

<path d="M18.6923882,8.19238816 L18.6923882,5.69238816 L5.69238816,5.69238816
L5.69238816,10.6923882 L13.6923882,10.6923882 L13.6923882,18.6923882
L18.6923882,18.6923882 L18.6923882,8.19238816 Z" id="Combined-Shape"
transform="translate(12.192388, 12.192388) rotate(45.000000) translate(-12.192388,
-12.192388) "></path>


</g> 

</g> 

</svg> 

<?xml version="1.0" encoding="UTF-8"?> 

<svg
width="14px" height="19px"
viewBox="0 0 14 19"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">


<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> 

<title>Combined Shape</title> 

<desc>Created with Sketch.</desc> 

<defs></defs> 

<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 

<g id="Custom-Preset" transform="translate(-8.000000, -3.000000)" fill="#D8D8D8"> 

<path d="M18.6923882,8.19238816 L18.6923882,5.69238816 L5.69238816,5.69238816
L5.69238816,10.6923882 L13.6923882,10.6923882 L13.6923882,18.6923882
L18.6923882,18.6923882 L18.6923882,8.19238816 Z" id="Combined-Shape"
transform="translate(12.192388, 12.192388) rotate(45.000000) translate(-12.192388,
-12.192388) "></path>


</g> 

</g> 

</svg> 

<?xml version="1.0" encoding="UTF-8"?> 

<svg
width="14px" height="19px"
viewBox="0 0 14 19"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">


<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> 

<title>Combined Shape</title> 

<desc>Created with Sketch.</desc> 

<defs></defs> 

<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 

<g id="Custom-Preset" transform="translate(-8.000000, -3.000000)" fill="#D8D8D8"> 

<path d="M18.6923882,8.19238816 L18.6923882,5.69238816 L5.69238816,5.69238816
L5.69238816,10.6923882 L13.6923882,10.6923882 L13.6923882,18.6923882
L18.6923882,18.6923882 L18.6923882,8.19238816 Z" id="Combined-Shape"
transform="translate(12.192388, 12.192388) rotate(45.000000) translate(-12.192388,
-12.192388) "></path>


</g> 

</g> 

</svg> 

Exploring ways to export
clean .svg icons with
Sketch… the correct way
https://vk.cc/7mfRx2
SVGO Compressor
Sketch plugin
Настройки SVGO
для Sketch
removeTitle, removeDesc, precision
Чек-лист
— SVGO и GZIP
— Невидимые объекты
— Объекты за пределами холста
— Пересекающиеся фигуры одного цвета
— Группы
— Эффекты
— Растровые изображения
#3
#3
SVG
10 KB
SVG
Optimized
9.82 KB
SVG
Edited + Optimized
4.63 KB
–5.19 KB
—52.85%
Больше 

форматов
04
JPEG 2000 — только Safari
JPEG XR — только IE и Edge
BPG — не поддерживается
WebP — Blink-браузеры
JPEG 2000 — только Safari
JPEG XR — только IE и Edge
BPG — не поддерживается
WebP — Blink-браузеры
WebP
Формат сжатия изображений с потерями и без.
Разработан Google в 2010 году.
xnview.com/en/xnconvert/
#4
#4
PNG24
2000×1360, 332 KB
PNG24
Optimized
331.71 KB
WebP
Converted
130.52 KB
–201.19 KB
—60.65%
Генерация
графики
05
CSS
SVG
Canvas
#5
1. Desaturate
2. Blend with transparency
// Grayscale


let grayscale = r * 0.4 + g * 0.59 + b * 0.21; 

// source и blend от 0 до 1
let darken = Math.min(source, blend); 

let multiply = source * blend; 

let colorBurn = 1 - (1 - source) / blend; 

let linearBurn = Math.max(0, source + blend - 1); 

let lighten = Math.max(source, blend); 

let screen = 1 - (1 - source) * (1 - blend);

let colorDodge = source / (1 - blend); 

let linearDodge = Math.min(1, source + blend); 

Formulas for Photoshop
blending modes
https://vk.cc/7mopUI
Canvas как способ
оптимизации графики
https://vk.cc/2AydDQ
#6
#6
PNG24
1294×778, 771 KB
PNG24
Source image
771.17 KB
PNG24
Optimized
707.66 KB
JPEG, 51
1294×778, 98 KB
SVG
1 KB
JPEG, 51
1294×778, 98 KB
SVG
1 KB
Фон
<svg width="647" height="389" viewBox="0 0 647 389">


<clipPath id="a"> 

<path d="<% … %>" fill="#000" /> 

</clipPath>


<image
clip-path="url(#a)"
width="100%"
height="100%"
xlink:href="photo.jpg" />


</svg> 

PNG24
Source image
771.17 KB
PNG24
Optimized
707.66 KB
JPEG+SVG
Optimized
99.62 KB
–671.56 KB
—87.08%
#7
Фон
JPEG
1 слой
PNG24
2 слой
PNG24
3 слой
PNG24
4 слой
PNG24
#7
JPEG + 4×PNG24
4000×1080, 11.92 MB
PNG24
PNG8 + JPEG
PNG8 + JPEG
Before
5 images
11.92 MB
After
9 images
2.02 MB
–9.9 MB
—83.08%
#8
Фон
CSS Gradient
Город
SVG Pattern
1 слой
Pattern with Linear Gradient
2 слой
Pattern with Linear Gradient
Шум
Генерируем в Canvas, вставляем как base64
Шум
Multiply, feBlend
SVG feBlend
https://vk.cc/7mosUy
–140 KB
Выводы
06
Атомы
Оптимизация
без потерь
Модернизация

изображения
Конвертация

формата
Разделение
 Объединение

See also
— images.guide by Addy Osmani
— И. Григорик Оптимизация изображений
— C. Чикуенок про JPEG (раз, два, три)
— С. Чикуенок про PNG (раз, два, три, четыре)
Оптимизируйте.
Тим Чаптыков
vk.com/tc
@chaptykov

Contenu connexe

Similaire à Оптимизация графики на практике

CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...
CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...
CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...CodeFest
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ontico
 
Павел Худяков: Работа с макетом
Павел Худяков: Работа с макетомПавел Худяков: Работа с макетом
Павел Худяков: Работа с макетомYandex
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationlgordey
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщикаmcslayer
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Yandex
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в DjangoMoscowDjango
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда7bits
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияMedia Gorod
 
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.Dmitry Dudin
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it forAlex Stepchenkov
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?Danil Negrienko
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Ontico
 
Moving from Flash to HTML5 – converting large projects
Moving from Flash to HTML5 – converting large projectsMoving from Flash to HTML5 – converting large projects
Moving from Flash to HTML5 – converting large projectsDevGAMM Conference
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 

Similaire à Оптимизация графики на практике (20)

CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...
CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...
CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-ве...
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
 
Павел Худяков: Работа с макетом
Павел Худяков: Работа с макетомПавел Худяков: Работа с макетом
Павел Худяков: Работа с макетом
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
 
Svg
SvgSvg
Svg
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решения
 
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.
Жесточайшая оптимизация производительности веб-страниц. Google pagespeed.
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 
SVG in game development
SVG in game developmentSVG in game development
SVG in game development
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it for
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
 
Moving from Flash to HTML5 – converting large projects
Moving from Flash to HTML5 – converting large projectsMoving from Flash to HTML5 – converting large projects
Moving from Flash to HTML5 – converting large projects
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 

Plus de Timophy Chaptykov

React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Как устроиться на работу в крупную IT-компанию
Как устроиться на работу в крупную IT-компаниюКак устроиться на работу в крупную IT-компанию
Как устроиться на работу в крупную IT-компаниюTimophy Chaptykov
 
CSS-менеджмент в 2016
CSS-менеджмент в 2016CSS-менеджмент в 2016
CSS-менеджмент в 2016Timophy Chaptykov
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 

Plus de Timophy Chaptykov (7)

Death from slides
Death from slidesDeath from slides
Death from slides
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Как устроиться на работу в крупную IT-компанию
Как устроиться на работу в крупную IT-компаниюКак устроиться на работу в крупную IT-компанию
Как устроиться на работу в крупную IT-компанию
 
CSS-менеджмент в 2016
CSS-менеджмент в 2016CSS-менеджмент в 2016
CSS-менеджмент в 2016
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 

Оптимизация графики на практике