SlideShare uma empresa Scribd logo
1 de 34
Оптимизируем
             загрузку страницы
                        Романичев В.В.

VETMANAGER TEAM         12.4.12   Стр. 1
План

•   Причины
•   Способы
•   Зачем нужна стадия компиляции
•   Примеры оптимизации




VETMANAGER TEAM           12.4.12   Стр. 2
Причины

•   Все любят скорость
•   Лимитирован трафик
•   Ограничение по скорости
•   Поисковая оптимизация




VETMANAGER TEAM           12.4.12   Стр. 3
1. Меньше запросов
80 % времени - загрузка
  компонентов
2 потока на загрузку с
  одного хоста




 VETMANAGER TEAM          12.4.12   Стр. 4
CSS спрайты



      .square1 {
        background-image: url(sprite.png);
        background-position: 3px 4px;
        width: 24px; height: 24px;
      }

VETMANAGER TEAM                     12.4.12   Стр. 5
Inline картинки
data:[<MIME-type>][;charset=<encoding>][;base64],<data>


Плюсы

    Меньше запросов

    Хорошо сжимаются

    Не нужны заголовки ответов

    Лучше кешируется




VETMANAGER TEAM                    12.4.12    Стр. 6
Конкатенация
У нас

    Some1.js

    Some2.js

    Some3.js
Нужно

    MegaSome.js




VETMANAGER TEAM           12.4.12   Стр. 7
2. CSS мне в HEAD
Помещая подключение к css файлам в хедере
 страницы мы получаем постепенный
 рендеринг страницы




VETMANAGER TEAM          12.4.12   Стр. 8
3. JS мне в ...
Помещая javascript-файлы вниз страницы мы
 позволяем браузеру загрузить страницу с
 контентом в первую очередь, а уже потом
 начать загрузку javascript-файлов.




VETMANAGER TEAM              12.4.12   Стр. 9
4. Минификация
 1) Удаляем все не влияющие на поведение и
  отображение символы.
2) Заменяем длинные выражения(none ->0)
3) Оптимизируем размер через анализ
поведения.




VETMANAGER TEAM            12.4.12   Стр. 10
5. Поддомены
 Обходим ограничение хостов




VETMANAGER TEAM           12.4.12   Стр. 11
6. Кэш броузера
 Настроив apache мы экономим время и
  трафик пользователя




VETMANAGER TEAM             12.4.12   Стр. 12
7. CDN для контента
    CDN (Content Delivery Network) — это
     множество веб-серверов, разнесенных
     географически для достижения
     максимальной скорости отдачи контента
     клиенту.




VETMANAGER TEAM          12.4.12   Стр. 13
8. Gzip - сжатие
  Коэффициент сжатия приблизительно равен
    5-ти но повышается нагрузка на сервер.




VETMANAGER TEAM              12.4.12   Стр. 14
9. Вынос inline скриптов
Плюсы

    Кешируемость

    Повторное использование

    Возможность убрать неиспользуемые
    скрипты




VETMANAGER TEAM          12.4.12   Стр. 15
10. Лишний контент


    Мертвый CSS, JS

    CSS, JS с других страниц

    Комментарии

    Постраничная навигация




VETMANAGER TEAM                12.4.12   Стр. 16
11. Размер компонент
Компоненты большого размера не
 кешируются некоторыми браузерами.
Для iPhone оптимальный размер компонента
 до 25 килобайт.




VETMANAGER TEAM        12.4.12   Стр. 17
Компиляция




VETMANAGER TEAM          12.4.12   Стр. 18
Блочная структура
Плюсы

    Декомпозиция и re-use

    Понятная архитектура

    Возможность легко убрать неиспользуемый
    контент
Минусы

    Стадия компиляции

VETMANAGER TEAM             12.4.12   Стр. 19
Конфиги




VETMANAGER TEAM         12.4.12   Стр. 20
pages
                  pages:
                   index:
                    doctype_html:
                     blocks:
                      html:
                       blocks:
                         head:
                         body:
                          blocks:
                            page:
                             blocks:
                              content:
                                         mod: «red»

VETMANAGER TEAM                     12.4.12    Стр. 21
Конфиг блока
tag: 'div'              HTML
attr:                   <div class=b-name data-i=some>
   - 'data-i': «some»          .... контент agile_board.html
html:                   </div>
   - agile_board.html
img:                     Sprite
   - bug.png
   - feature.png         bug.png             Feature.png
css:
   - agile_board.css
                         CSS
   - columns.css
                         /* css from agile_board.css */
js:
                         /* css from colums.css */
   - agile_board.js
                         /* css for sprite */
 VETMANAGER TEAM                   12.4.12     Стр. 22
Инструменты
 Получение статистики
 Firebug, Page Speed, Yslow, siege ...

 Компиляция
 Make, GNUMake, ant, phing, rake, pake

 Операции
 YUICompressor.jar, CSSO, htmlcompressor.jar,
 Closure Compiler, html-compressor.php, spritify.php




VETMANAGER TEAM                 12.4.12   Стр. 23
Конкатенация
pake_task('html_build_pages');
function run_html_build_pages(){
   ...
   $pages = $settings['pages'];
   foreach ($pages as $pageName => $pageSettings) {
       $сontent = getContent($pageSettings, 'html');
       pake_write_file($htmlPath, $сontent, true);
   }
}
file_get_contents спасет отца русской демократии



VETMANAGER TEAM              12.4.12   Стр. 24
CSS спрайты
$spritify = new spritify();
...
   $spritify->add_image($filepath, $cssSelector);
....
$spritify->safe_image($imgPath);
pake_write_file($cssPath
      , $spritify->generate_css($imgPath));
     .agile_board-img-feature {
       background-image: url(../img/index.png);
       background-position: 0px -24px;
       width: 24px;
       height: 24px;
     }

VETMANAGER TEAM                   12.4.12    Стр. 25
Оптимизация




VETMANAGER TEAM           12.4.12   Стр. 26
Минификация HTML
function HTMLCompress($fileBig, $fileCompress) {
  $cmd = "php html-compressor.php -x
         $fileBig >> $fileCompress";
  pake_sh($cmd);
}
                         11%



                  2032                   1816

VETMANAGER TEAM                12.4.12      Стр. 27
Минификация CSS
function YUICompress($fileBig, $fileCompress) {
  $cmd = "java -jar yuicompressor.jar
                      $fileBig -o $fileCompress";
  pake_sh($cmd);
}
                         33%



                  1785                   1193

VETMANAGER TEAM                12.4.12      Стр. 28
Минификация CSS
function YUICompress($fileBig, $fileCompress) {
  $cmd = "java -jar yuicompressor.jar
                      $fileBig -o $fileCompress";
  pake_sh($cmd);
}
                         33%



                  1785                   1193

VETMANAGER TEAM                12.4.12      Стр. 29
Минификация JS
function YUICompress($fileBig, $fileCompress) {
  $cmd = "java -jar yuicompressor.jar
                      $fileBig -o $fileCompress";
  pake_sh($cmd);
}
                           13%



                  148801                   129457

VETMANAGER TEAM                  12.4.12       Стр. 30
a2enmod deflat(gzip)
<ifmodule mod_deflate.c>
     AddOutputFilterByType DEFLATE text/text
     ...
     application/javascript
</ifmodule>

                         63%



              134.5 KB                   49.6 KB

VETMANAGER TEAM                12.4.12       Стр. 31
a2enmod expires
<IfModule mod_expires.c>
   Header append Cache-Control "public"
   FileETag MTime Size
   ExpiresActive On
   ExpiresDefault "access plus 0 minutes"
   ExpiresByType text/html "access plus 1 years"
</IfModule>

                              92%



                  49.6 KB                      3,5 KB

VETMANAGER TEAM                      12.4.12       Стр. 32
Итог

Правильная методология                 -98%
Стадия компиляции                      веса
Настройка сервера                    страницы




  VETMANAGER TEAM          12.4.12   Стр. 33
Спасибо за внимание!




VETMANAGER TEAM       12.4.12   Стр. 34

Mais conteúdo relacionado

Mais procurados

Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Alexey Kostin
 
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...Марина Широчкина "Производительность клиентсайда через тестирование скорости ...
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...Yandex
 
Михаил Черномордиков Ie9
Михаил Черномордиков   Ie9Михаил Черномордиков   Ie9
Михаил Черномордиков Ie9Siel01
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 
инструментарий
инструментарийинструментарий
инструментарийigdweb
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизацияRoman Brovko
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...GeeksLab Odessa
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Andrey Taritsyn
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» Гузель Рахимова
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Yandex
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Ontico
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureAlexander Feschenko
 

Mais procurados (20)

Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
 
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...Марина Широчкина "Производительность клиентсайда через тестирование скорости ...
Марина Широчкина "Производительность клиентсайда через тестирование скорости ...
 
Михаил Черномордиков Ie9
Михаил Черномордиков   Ie9Михаил Черномордиков   Ie9
Михаил Черномордиков Ie9
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
инструментарий
инструментарийинструментарий
инструментарий
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...
WebCamp: Developer Day: Быстродействие веб-сайта. Методичный анализ и глубины...
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
 
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 

Semelhante a оптимизация скорости загрузки страницы

Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияMedia Gorod
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Andrey Taritsyn
 
Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Yandex
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаВладимир Колос
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Yandex
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptMikhail Davydov
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Yandex
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Yandex
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinyaevents
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)aragozin
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Creating custom module
Creating custom moduleCreating custom module
Creating custom moduleyulia_tsyba
 

Semelhante a оптимизация скорости загрузки страницы (20)

Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решения
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
 
Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайта
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
 
Highload++ 2015
Highload++ 2015Highload++ 2015
Highload++ 2015
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
2011 07-кластер
2011 07-кластер2011 07-кластер
2011 07-кластер
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshin
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Creating custom module
Creating custom moduleCreating custom module
Creating custom module
 

оптимизация скорости загрузки страницы

  • 1. Оптимизируем загрузку страницы Романичев В.В. VETMANAGER TEAM 12.4.12 Стр. 1
  • 2. План • Причины • Способы • Зачем нужна стадия компиляции • Примеры оптимизации VETMANAGER TEAM 12.4.12 Стр. 2
  • 3. Причины • Все любят скорость • Лимитирован трафик • Ограничение по скорости • Поисковая оптимизация VETMANAGER TEAM 12.4.12 Стр. 3
  • 4. 1. Меньше запросов 80 % времени - загрузка компонентов 2 потока на загрузку с одного хоста VETMANAGER TEAM 12.4.12 Стр. 4
  • 5. CSS спрайты .square1 { background-image: url(sprite.png); background-position: 3px 4px; width: 24px; height: 24px; } VETMANAGER TEAM 12.4.12 Стр. 5
  • 6. Inline картинки data:[<MIME-type>][;charset=<encoding>][;base64],<data> Плюсы  Меньше запросов  Хорошо сжимаются  Не нужны заголовки ответов  Лучше кешируется VETMANAGER TEAM 12.4.12 Стр. 6
  • 7. Конкатенация У нас  Some1.js  Some2.js  Some3.js Нужно  MegaSome.js VETMANAGER TEAM 12.4.12 Стр. 7
  • 8. 2. CSS мне в HEAD Помещая подключение к css файлам в хедере страницы мы получаем постепенный рендеринг страницы VETMANAGER TEAM 12.4.12 Стр. 8
  • 9. 3. JS мне в ... Помещая javascript-файлы вниз страницы мы позволяем браузеру загрузить страницу с контентом в первую очередь, а уже потом начать загрузку javascript-файлов. VETMANAGER TEAM 12.4.12 Стр. 9
  • 10. 4. Минификация 1) Удаляем все не влияющие на поведение и отображение символы. 2) Заменяем длинные выражения(none ->0) 3) Оптимизируем размер через анализ поведения. VETMANAGER TEAM 12.4.12 Стр. 10
  • 11. 5. Поддомены Обходим ограничение хостов VETMANAGER TEAM 12.4.12 Стр. 11
  • 12. 6. Кэш броузера Настроив apache мы экономим время и трафик пользователя VETMANAGER TEAM 12.4.12 Стр. 12
  • 13. 7. CDN для контента CDN (Content Delivery Network) — это множество веб-серверов, разнесенных географически для достижения максимальной скорости отдачи контента клиенту. VETMANAGER TEAM 12.4.12 Стр. 13
  • 14. 8. Gzip - сжатие Коэффициент сжатия приблизительно равен 5-ти но повышается нагрузка на сервер. VETMANAGER TEAM 12.4.12 Стр. 14
  • 15. 9. Вынос inline скриптов Плюсы  Кешируемость  Повторное использование  Возможность убрать неиспользуемые скрипты VETMANAGER TEAM 12.4.12 Стр. 15
  • 16. 10. Лишний контент  Мертвый CSS, JS  CSS, JS с других страниц  Комментарии  Постраничная навигация VETMANAGER TEAM 12.4.12 Стр. 16
  • 17. 11. Размер компонент Компоненты большого размера не кешируются некоторыми браузерами. Для iPhone оптимальный размер компонента до 25 килобайт. VETMANAGER TEAM 12.4.12 Стр. 17
  • 19. Блочная структура Плюсы  Декомпозиция и re-use  Понятная архитектура  Возможность легко убрать неиспользуемый контент Минусы  Стадия компиляции VETMANAGER TEAM 12.4.12 Стр. 19
  • 20. Конфиги VETMANAGER TEAM 12.4.12 Стр. 20
  • 21. pages pages: index: doctype_html: blocks: html: blocks: head: body: blocks: page: blocks: content: mod: «red» VETMANAGER TEAM 12.4.12 Стр. 21
  • 22. Конфиг блока tag: 'div' HTML attr: <div class=b-name data-i=some> - 'data-i': «some» .... контент agile_board.html html: </div> - agile_board.html img: Sprite - bug.png - feature.png bug.png Feature.png css: - agile_board.css CSS - columns.css /* css from agile_board.css */ js: /* css from colums.css */ - agile_board.js /* css for sprite */ VETMANAGER TEAM 12.4.12 Стр. 22
  • 23. Инструменты Получение статистики Firebug, Page Speed, Yslow, siege ... Компиляция Make, GNUMake, ant, phing, rake, pake Операции YUICompressor.jar, CSSO, htmlcompressor.jar, Closure Compiler, html-compressor.php, spritify.php VETMANAGER TEAM 12.4.12 Стр. 23
  • 24. Конкатенация pake_task('html_build_pages'); function run_html_build_pages(){ ... $pages = $settings['pages']; foreach ($pages as $pageName => $pageSettings) { $сontent = getContent($pageSettings, 'html'); pake_write_file($htmlPath, $сontent, true); } } file_get_contents спасет отца русской демократии VETMANAGER TEAM 12.4.12 Стр. 24
  • 25. CSS спрайты $spritify = new spritify(); ... $spritify->add_image($filepath, $cssSelector); .... $spritify->safe_image($imgPath); pake_write_file($cssPath , $spritify->generate_css($imgPath)); .agile_board-img-feature { background-image: url(../img/index.png); background-position: 0px -24px; width: 24px; height: 24px; } VETMANAGER TEAM 12.4.12 Стр. 25
  • 27. Минификация HTML function HTMLCompress($fileBig, $fileCompress) { $cmd = "php html-compressor.php -x $fileBig >> $fileCompress"; pake_sh($cmd); } 11% 2032 1816 VETMANAGER TEAM 12.4.12 Стр. 27
  • 28. Минификация CSS function YUICompress($fileBig, $fileCompress) { $cmd = "java -jar yuicompressor.jar $fileBig -o $fileCompress"; pake_sh($cmd); } 33% 1785 1193 VETMANAGER TEAM 12.4.12 Стр. 28
  • 29. Минификация CSS function YUICompress($fileBig, $fileCompress) { $cmd = "java -jar yuicompressor.jar $fileBig -o $fileCompress"; pake_sh($cmd); } 33% 1785 1193 VETMANAGER TEAM 12.4.12 Стр. 29
  • 30. Минификация JS function YUICompress($fileBig, $fileCompress) { $cmd = "java -jar yuicompressor.jar $fileBig -o $fileCompress"; pake_sh($cmd); } 13% 148801 129457 VETMANAGER TEAM 12.4.12 Стр. 30
  • 31. a2enmod deflat(gzip) <ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/text ... application/javascript </ifmodule> 63% 134.5 KB 49.6 KB VETMANAGER TEAM 12.4.12 Стр. 31
  • 32. a2enmod expires <IfModule mod_expires.c> Header append Cache-Control "public" FileETag MTime Size ExpiresActive On ExpiresDefault "access plus 0 minutes" ExpiresByType text/html "access plus 1 years" </IfModule> 92% 49.6 KB 3,5 KB VETMANAGER TEAM 12.4.12 Стр. 32
  • 33. Итог Правильная методология -98% Стадия компиляции веса Настройка сервера страницы VETMANAGER TEAM 12.4.12 Стр. 33