Жесточайшая оптимизация производительности...

Post on 16-Jul-2015

409 views 9 download

Tags:

Transcript of Жесточайшая оптимизация производительности...

Жесточайшая

Оптимизация скорости

загрузки веб-страниц

Дима Дудин @nedudi

Зачем ?… неужели это так важно

1 секунда?

1 секунда в WEB

11% - потеря количества просмотров.

16% - потеря удовлетворенности клиентов.

7% - потеря конверсии.

Конверсия магазинов увеличивается на

74%

при уменьшении времени загрузки

с 8 до 2 секунд

Деньги - не главное

Деньги - не главное

ГЛАВНОЕ, что-бы все было

четко

ГЛАВНОЕ, что-бы все было

четко

прочувствуйте боль…

прочувствуйте боль…

Как понять ?… анализы, анализы

Pingdom

Pingdom

YSLOW

WEBPAGETEST

pagespeed

pagespeed

pagespeed

Типовые проблемы… тяжко жить веб-разработчику

РАЗМЕР ИЗОБРАЖЕНИЙ

авто

Сжималки

разрезалки

спрайты и тп…

grunt-svgmingulp-svgmin

grunt-spritesmithgulp-spritegrunt-webpgulp-webpgrunticon

addyosmani.com/blog/image-optimization-tools

и еще тутfrontender.info/performance-optimization

<Picture>

vimeo.com/108326836

<picture> <source media="(min-width: 650px)" srcset="images/kitten-stretching.png"> <source media="(min-width: 465px)" srcset="images/kitten-sitting.png"> <img src="images/kitten-curled.png" alt="a cute kitten"></picture>

scottjehl.github.io/picturefill

И еще …

<img src=“hi.png" height="100" width="100"

/>

ФОРМАТЫ

ИЗОБРАЖЕНИЙ

JPEG

PNG

SVG

Lazy

loading…

GZIP

Cache html5.by/blog/cache

CACHE отключен

1. Last-Modified

2. ETag

3. EXPIRES

<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresDefault "access plus 2 days"</IfModule>

server { ...

location ~* \.(gif|ico|jpe?g|png)(\?[0-9]+)?$ { expires 1w; } location ~* \.(css|js)$ { expires 1d; } ...

}

4. MAX AGE

<ifModule mod_headers.c><FilesMatch "\.(gif|ico)$"> Header set Cache-Control "max-age=2592000, public"</FilesMatch>

<FilesMatch "\.(js)$"> Header set Cache-Control "max-age=86400,

private, must-revalidate"</FilesMatch>

<FilesMatch "\.(php)$"> Header set Cache-Control "private, no-store, no-cache,

must-revalidate, no-transform, max-age=0" Header set Pragma "no-cache"</FilesMatch>

</ifModule>

server { ...

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { add_header Cache-Control "max-age=86400, public"; } ...

}

обфускация

js сss html

Сборка

js сss

JavaScript в конец документа

CSS в начало документа

?

CDN

:( :)

DNS Lookup time

feedthebot.com/tools/requests

feedthebot.com/tools/requests

WTF?

<link rel="dns-prefetch" href="//trololo.com">

Enable Keep-AlivE

избегаем

javascript редиректов

2013 GRUNT

2013 GRUNT

2014 GULP

2013 GRUNT

2014 GULP

…2015 GROLOLO

2013 GRUNT

2014 GULP

…2015 GROLOLO

2013 GRUNT

2014 GULP

…2015 GROLOLO

2013 GRUNT

2014 GULP

…2015 GROLOLO

2013 GRUNT

2014 GULP

…2015 GROLOLO

2013 GRUNT

2014 GULP

…2015 GROLOLO

2005-2012

2005-2012

+2005-2012

+2005-2012

?

+2005-2012

?=

+2005-2012

?=

+2005-2012

?=

хочу все и

сразу

хочу все и

сразу

pagespeed

pagespeed

developers.google.com/speed/pagespeed/module/filters

Build from source :( Package :)

Build from source :( Package :)

Apache ModPagespeedEnableFilters collapse_whitespace

Nginx pagespeed EnableFilters collapse_whitespace;

Collapse Whitespace

Apache ModPagespeedEnableFilters insert_dns_prefetch

Nginx pagespeed EnableFilters insert_dns_prefetch;

Pre-Resolve DNS

Apache ModPagespeedEnableFilters combine_css

Nginx pagespeed EnableFilters combine_css;

combine css

Apache ModPagespeedEnableFilters rewrite_css

Nginx pagespeed EnableFilters rewrite_css;

Minify CSS

Apache ModPagespeedEnableFilters move_css_to_head

Nginx pagespeed EnableFilters move_css_to_head;

Move CSS to Head

Apache ModPagespeedEnableFilters prioritize_critical_css

Nginx pagespeed EnableFilters prioritize_critical_css;

Prioritize Critical CSS

Apache ModPagespeedEnableFilters combine_javascript

Nginx pagespeed EnableFilters combine_javascript;

combine js

Apache ModPagespeedEnableFilters rewrite_javascript

Nginx pagespeed EnableFilters rewrite_javascript;

Minify Js

Apache ModPagespeedEnableFilters canonicalize_javascript_libraries

Nginx pagespeed EnableFilters

canonicalize_javascript_libraries;

Canonicalize JavaScript Libraries

Apache ModPagespeedEnableFilters include_js_source_maps

Nginx pagespeed EnableFilters

include_js_source_maps;

Include JavaScript Source Maps

Apache ModPagespeedEnableFilters move_css_above_scripts

Nginx pagespeed EnableFilters

move_css_above_scripts;

Move CSS Above Scripts

Apache ModPagespeedEnableFilters defer_javascript

Nginx pagespeed EnableFilters defer_javascript;

Defer JavaScript

Apache ModPagespeedEnableFilters dedup_inlined_images

Nginx pagespeed EnableFilters dedup_inlined_images;

Deduplicate Inlined Images

Apache ModPagespeedEnableFilters elide_attributes

Nginx pagespeed EnableFilters elide_attributes;

Elide Attributes

Apache ModPagespeedEnableFilters extend_cache

Nginx pagespeed EnableFilters extend_cache;

Extend Cache

Apache ModPagespeedEnableFilters flatten_css_imports

Nginx pagespeed EnableFilters flatten_css_imports;

Flatten CSS Imports

Apache ModPagespeedEnableFilters lazyload_images

Nginx pagespeed EnableFilters lazyload_images;

Lazyload Images

Apache ModPagespeedEnableFilters sprite_images

Nginx pagespeed EnableFilters sprite_images;

Sprite Images

Apache ModPagespeedEnableFilters rewrite_images

Nginx pagespeed EnableFilters rewrite_images;

Optimize Imagesinline_images +

inline_preview_images +recompress_images +

convert_jpeg_to_webp + resize_images

<img src=“data:image/png;base64,iVBORw…”>

<img src=“girl.png”>

Apache ModPagespeedEnableFilters local_storage_cache

Nginx pagespeed EnableFilters local_storage_cache;

Local Storage Cache

ЭКСПЕРИМЕНТИРУЙТЕ

ЭКСПЕРИМЕНТИРУЙТЕ

НИКОМУ НЕ ВЕРЬТЕ

НИКОМУ НЕ ВЕРЬТЕ

@nedudi @html5by

Вопросы ? nedudi@gmail.com

html5.by

vk.com/html5byfacebook.com/html5bytwitter.com/html5by