Жесточайшая оптимизация производительности...
-
Upload
dmitry-dudin -
Category
Software
-
view
409 -
download
9
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
<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
Вопросы ? [email protected]
html5.by
vk.com/html5byfacebook.com/html5bytwitter.com/html5by