83
Автоматизация хранения графики на проекте Online4 Тимофей Чаптыков [email protected] @chaptykov

CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

  • View
    1.008

  • Download
    4

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Автоматизация храненияграфики на проекте Online4Тимофей Чаптыков

[email protected] @chaptykov

Page 2: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 3: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Задача

3

Page 4: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 5: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 6: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Экраны с высоким разрешением

Page 7: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Пиксель в пиксель

Page 8: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Привычный workflow

Page 9: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Автоматизация

Page 10: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Инструменты

10

Page 11: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 12: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Исследование

12

Page 13: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Растровые форматы

— GIF

— JPG

— PNG

13

Page 14: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Растровые форматы

— GIF

— JPG

— PNG

14

Page 15: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Векторные форматы

— SVG

— Шрифт

— Flash

— Silverlight

15

Page 16: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Векторные форматы

— SVG

— Шрифт

— Flash

— Silverlight

16

Page 17: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 18: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Поддержка браузерами

Всего Online4

Растровый спрайт 94.08% 100%

SVG-спрайт 84.62% 95%

Шрифт 91.38% 100%

Can I use

18

Page 19: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

PNG-спрайт. Плюсы

1. Привычный формат;

2. качество не зависит от устройства и платформы.

19

Page 20: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

PNG-спрайт. Минусы

1. Отдельная версия для каждого device-pixel-ratio

2. нелинейный рост размера файла.

20

Page 21: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Иконочный шрифт. Плюсы

1. Вектор;

2. удобное управление цветом, размером через CSS.

21

Page 22: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Иконочный шрифт. Минусы

1. Только одноцветные иконки;

2. сглаживание в Windows.

22

Page 23: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

SVG-спрайт. Плюсы

1. Вектор;

2. привычный механизм использования.

23

Page 24: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

SVG-спрайт. Минусы

1. Нет поддержки Internet Explorer 8;

2. быстродействие;

3. рендеринг при измененном размере в Firefox, Opera.

24

Page 25: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Критерии сравнения

— Размер файлов;

— скорость рендеринга.

25

Page 26: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 27: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Размер файлов

27

PNG 9,98 КБ

TTF 5,75 КБ

EOT 3,42 КБ

SVG 5,52 КБ

PNGO

GZIP

GZIP

GZIP

Page 28: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Скорость рендера

28

103,2 мс

123,7 мс

227,8 мс

PNG 55 мс

TTF 41,8 мс

SVG 35,6 мс

Page 29: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

PNG9,98

103,2

SVG5,52

227,8

TTF5,75

123,7Время, мс

Размер, КБ

29

Page 30: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Шрифт с иконкамиFONT

30

Page 31: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

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

— Сложно подготовить шрифт;

— мало инструментов;

— хочется все хранить в одном месте.

31

Page 32: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 33: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 34: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Сохранение

Page 35: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Сохранение

Page 36: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 37: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 38: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Подготовка шрифта

— github.com/sindresorhus/grunt-svgmin

— github.com/FontCustom/fontcustom

38

Page 39: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 40: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Управление размером

.icon1 {

width: 17px;

height: 13px;

}

.icon2 {

height: 18px;

}

40

Page 41: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Управление размером

.icon {

font-size: 18px;

}

41

Page 42: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Грязный код

.icon {

top: -1px;

margin-top: -1px;

vertical-align: -1px;

}

42

Page 43: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Сглаживание в Windows

Page 44: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 45: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Растровый спрайтPNG

45

Page 46: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 47: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Подготовка спрайта

— https://github.com/Ensighten/grunt-spritesmith

— github.com/JamieMason/grunt-imageoptim

47

Page 48: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Использование

.icon {

.sprite(@filename);

}

48

Page 49: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Результат

.icon {

background-image: url(sprite.png);

background-position: -60px 0;

width: 16px;

height: 16px;

}

49

Page 50: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Ретина

— Отдельная версия изображения;

— подключаем через media queries

50

Page 51: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Высокая разрешение экрана ≠ ретина

Page 52: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 53: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 54: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

2000 файлов?

Page 55: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Векторные иконкиSVG

55

Page 56: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

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

1. Нет поддержки Internet Explorer 8

2. Рендеринг при измененном размере в Firefox, Opera

3. Быстродействие

56

Page 57: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

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

1. Нет поддержки Internet Explorer 8 Делаем фолбек на PNG

2. Рендеринг при измененном размере в Firefox, Opera

3. Быстродействие

57

Page 58: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

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

1. Нет поддержки Internet Explorer 8 Делаем фолбек на PNG

2. Рендеринг при измененном размере в Firefox, Opera

Используем только реальный размер

3. Быстродействие

58

Page 59: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

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

1. Нет поддержки Internet Explorer 8 Делаем фолбек на PNG

2. Рендеринг при измененном размере в Firefox, Opera

Используем только реальный размер

3. Быстродействие отказываемся от спрайта в пользу base64

59

Page 60: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 61: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 62: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 63: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 64: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 65: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 66: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Растеризация SVG

— github.com/dbushell/grunt-svg2png

— github.com/chaptykov/grunt-svg2png (форк)

66

Page 67: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Не все визуальные эффекты можнореализовать в SVG

Page 68: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Собираем всё вместе

68

Page 69: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Всё вместе

— SVG+base64 для большей части изображений интерфейса;

— 4×PNG через media queries для того, что невозможно

реализовать через SVG;

— уменьшенные изображения для иллюстраций;

— CSS-рисование.

69

Page 70: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 71: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

1.5 dppx

spritesmith

imageoptim

CSS

PNGPNG PNG

1 dppxPNG

3 dppxPNG

2 dppxPNG

Спрайты Спрайты

app.cssCSS + sprites

Page 72: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 73: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Использование

73

Page 74: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

До

.svg-icon {

.bg('filename');

}

74

Page 75: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

После

.svg-icon {

background-image: url(data:image/svg+xml;base64,…);

background-repeat: no-repeat;

width: 16px;

height: 16px;

}

75

Page 76: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Для Internet Explorer 8

.svg-icon {

background-image: url(sprite.png);

background-position: -60px 0;

width: 16px;

height: 16px;

}

76

Page 77: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

До

.png-icon {

.bg('filename', 1);

}

77

Page 78: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

После

.svg-icon {

background-image: url(sprite.png);

background-size: 160px 120px;

background-position: -60px 0;

width: 16px;

height: 16px;

}

78

Page 79: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

После

@media

only screen and (-webkit-min-device-pixel-ratio: 2),

only screen and (min-resolution: 192dpi),

only screen and (min-resolution: 2dppx) {

.svg-icon {

background-image: url(sprite.192dpi.png);

}

}79

Page 80: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС
Page 81: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Результаты

— Вся графика генеруется одной командой;

— 1 запрос к серверу на все стили и изображения;

— 130 КБ на все стили и изображения.

81

Page 82: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Особенности

— Только no-repeat

— огромный список изменений в репозитории, если нет командных

соглашений;

— разные версии Adobe Illustrator сохраняют SVG по-разному.

82

Page 83: CodeFest 2014. Чаптыков Т. — Автоматизация хранения графики в новой онлайн-версии 2ГИС

Тимофей Чаптыков

[email protected]@chaptykov

83