SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Андрей Кулешов
Деловые решения
Про что мы говорим?
                 Страница
                 И множество
                 связанных с ней
                 ресурсов
Зачем городить огород?
Насколько
   терпеливы
   пользователи?




* Why Web Performance Matters (Richard Campbell)
Три числа терпения
 0.1 секунды
  После этой границы человек начинает замечать
  задержку
 1 секунда
  На этой границе человек начинает подозревать, что с
  системой что-то не так. Теряется чувство прямого
  взаимодействия с компьютером
 10 секунд
  «Время смерти» – человек начинает подозревать, что
  система не работает. Перезагружает страницу второй
  раз, переключается на другие задачи, идёт делать чай
  http://www.useit.com/papers/responsetime.html
Изменение показателей
   при увеличении времени
   ожидания
                      0.00%
                      -1.00%
     Percent change




                      -2.00%
                      -3.00%
                      -4.00%
                      -5.00%
                                      50           200            500       1000         2000
                                                           Added delay

                         Queries per visitor       Query refinement      Revenue per visitor
                         Any clicks                Satisfaction
* Why Web Performance Matters (Richard Campbell)
На что тратится время?
    Подсистемы Internet Explorer




                                                                              Marshalling
            Networking




                                                                                                  Formatting
                                                   Collections




                                                                                                                                   Rendering
                                                                 JavaScript




                                                                                                               Building

                                                                                                                          Layout
                         HTML




                                                                                            DOM




                                                                                                                Block
                                      CSS




50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
На что тратится время?
    Средние значения для пяти новостных сайтов




                                                                          HTML Parsing
                                                                          CSS Parsing
                                                                          Collections
                                                                          JavaScript
                                                                          Marshalling
                                                                          Native OM
                                                                          Formatting
                                                                          BlockBuilding
                                                                          Layout
                                                                          Rendering




50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
На что тратится время?
    Средние значения для нескольких AJAX-сайтов




                                                                          HTML Parsing
                                                                          CSS Parsing
                                                                          Collections
                                                                          JavaScript
                                                                          Marshalling
                                                                          Native OM
                                                                          Formatting
                                                                          BlockBuilding
                                                                          Layout
                                                                          Rendering




50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
Кто же побеждает?
 Побеждают не лучшие в чем-то одном
 Побеждают те, кто последовательно хороши во
 всём:
 - объём информации для скачивания;
 - количество DOM-элементов;
 - количество CSS-правил
 - количество изображений;
 - количество блоков JavaScript-кода;
 - количество строк JavaScript-кода;
 - и те, кто всё это правильно использует.
Начинается всё с Сети…
 Несмотря на рост пропускной способности
  каналов, она все равно остаётся ограниченной
 Особенно если учесть стремительно растущий
  рынок мобильных устройств
 Поэтому два основных принципа:
  - уменьшаем количество ресурсов
  - уменьшаем размер ресурсов
Чем меньше нужно скачать –
тем лучше
 Минимизируйте количество используемых
 ресурсов
  Не следует множить сущее без необходимости
                                     Уильям Оккам
Избегайте перенаправлений
Request            Response
GET / HTTP/1.1     HTTP/1.1 303 See Other
Host: getdev.net   Location:
                   http://www.getdev.net/
Демо
Request? Response? Headers?
Сжатие на сервере
Response details      Все современные браузеры
HTTP/1.1 200 OK        поддерживают приём сжатого
Content-Encoding:      содержимого (gzip, deflate)
gzip
Server: Microsoft-    Резко уменьшается объем
IIS/7.5                передаваемых по сети данных
                      Поддерживается всеми
                       основными серверами
                       (IIS, Apache, nginx)
                      Единственный минус –
                       процессорное время. Но он с
                       лихвой перевешивается
                       выигрышем в траффике.
Кэширование
Response details          Все ваши ресурсы с
HTTP/1.1 200 OK            меняющимся содержим не
Content-Type:
image/jpeg
                           должны быть закэшированы
Expires: Sat, 31 Oct      Все ваши ресурсы с
2020 00:00:00 GMT          постоянным содержим
Last-Modified: Mon, 10
Oct 2011 18:55:14 GMT
                           должны быть закэшированы
ETag: "1fc57257e871:0‚     навсегда
Response details          ETag и Last-Modified
HTTP/1.1 304 Not
Modified                  Регистр в названиях ресурсов
Last-Modified: Mon, 10     icon.png и Icon.png – один
Oct 2011 18:55:14 GMT      файл, но два скачивания…
Демо
Кэширование и сжатие на IIS
Вынесение ресурсов
  на несколько доменов
                    Большинство
                                                               getdev.netсовременных браузеров
                                                                         загружают с одного
                                                                         домена одновременно 6-
                                                                         10 ресурсов
                                                                        Распределив ресурсы по
                                                                         нескольким доменам –
                                                                         получим больше
                                                                         одновременных загрузок
                                                                        Маленькая прибавка к
                                                       img1.getdev.net   производительности – на
                                                                         эти домены не будут
                                                                         пересылаться cookies при
                                                                         каждом запросу
50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
Использование
Content Delivery Network (CDN)
 Может быть использовано для статического
  контента (логотипы, картинки), и при некотором
  усердии – для динамического
 Пользователь скачивает ресурс с сервера, наиболее
  близкого к нему
 Если это популярная JS-библиотека – есть
  шанс, что у пользователя она уже скачана, и её не
  придётся качать заново
Использование спрайтов
                                          ImageSprite – одна большая
                               картинка, которая содержит в
                               себе множество маленьких
                              И множество CSS-
                               правил, которые хранят
                               координаты и размер каждой из
                               них
                              Общий размер для скачивания
                               уменьшается
                              Нужно скачать только один файл
http://www.google.ru/intl/ru/options/
http://www.google.ru/options/i12.png
http://css-tricks.com/158-css-sprites/
Демо
Использование спрайтов
Использование нескольких
доменов
Скачали данные – рендерим
страницу
 Что тоже нужно делать быстро
 И иногда достаточно казаться, а не быть
CSS-файлы – в начале страницы
 Сразу же по получении CSS файла браузер
  начинает рендерить красивую картинку
 Пользователь быстрее получает
  сайт, приближенный по виду и разметке к
  финальному состоянию
 Загрузка других ресурсов при этом не блокируется
Не делайте вложенных и
встроенных CSS-стилей
<html>
<head>
                               Это очень просто и быстро –
  <title>Test</title>           сделать стиль для одного-
</head>
<body>                          единственного элемента
  <style>
    .item { color:#009900;}     встроенным в страницу
  </style>
  <div class=‘item’>           Но на этапе рендеринга это
    MyItem
  </div>                       ухудшает
  <div style=‘color:Red;’>
    MyItem 2
                               производительность
  </div>
 </body>
</html>
Используйте PNG, JPEG и JPEG-XR
 JPEG – для фотографий
 PNG – для всего остального
 GIF – устаревший формат – занимает больше
  места, потребляет больше CPU
 JPEG-XR – для фотографий высокого разрешения.
  Действительно высокого 
… и показывайте их
в реальном размере
<!–- photo 800х600 -->    Скачиваем больше, чем
<img width=‚80px‛
height=‚60px‛              нужно
src=‚wallpaper.jpg‛ />
                          Тратим процессорное время
                           на изменение размера
                          А ведь достаточно всего
                           один раз изменить размер
Используйте CSS 3 и HTML5
Поддерживается большинством современных браузеров
 Для градиентов
-ms-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333))
-webkit-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333))
-moz-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333))

 Для скругления углов
border-radius:18px;
-webkit-border-radius: 100px;
-moz-border-radius: 100px;


  Для рисования на канве
И теперь можно запускать
скрипты
 Запускать их лучше всего в тот момент, когда DOM
 уже полностью скачан.
 Внешние ресурсы в это время, скорее всего, ещё
 грузятся, но ждать их не имеет смысла
JS-файлы – в конце страницы
 Пока загружается и исполняется JavaScript файл –
 не производится ни скачивание, ни выполнение
 никаких других ресурсов
 (по стандарту. На практике, большинство браузеров скачивают
 ресурсы, но не выполняют их)
 Поэтому сначала лучше дать загрузиться всему
  остальному, чтобы пользователь увидел страницу, и
  лишь затем лезть со своим программированием
 Если очень-очень надо в начале – то помечаем
  аттрибутом defer (откладывающем выполнение)
Кэшируйте обращение к DOM
 $(“.class1”).show();
  $(“.class1”).hide();
  - два раза проходит по всему (возможно, очень
  большому!) дереву
  var x = $(“.class1”);
  x.show();
  x.hide();
  - почти в два раза эффективнее
Изменение DOM
 Если нужно внести изменения в страницу –
 сначала всё подготовьте, а потом уже один раз
 меняйте
 var content = getTitle() + getBody() + getFooter();
 myControl.innerHtml = content;

 innerHtml – самый быстрый способ сделать
 изменение
Минимизируйте JavaScript
/* this function is used to calculate sum of two numbers */
Function sumFunction (value1, value2)
{
         var sum = value1 + value2;
         Return sum;
}


Минимизированный скрипт:
function sum(a, b){return a + b;}

 можно делать вручную (удачи)
 можно делать в момент выкладывания приложения
 можно делать во время исполнения приложения
Используйте Web Workers
var worker = new
Worker("worker_script.js");
worker.postMessage("Hello World!");


 Могут быть использованы для
  долговременных расчетов или для фоновых
  операций
 Не замедляют пользовательский интерфейс
Демо
Минифицированный ЯваСкрипт


 Cassette for ASP.NET MVC by Andrew Davey
  https://github.com/andrewdavey
А можно как-то вот это всё
автоматизировать?
 Есть инструменты.
 Встроенные средства разработчика во всех браузерах
 Плагины от Гугла и Яху
  http://veerasundar.com/blog/2009/06/google-page-speed-firefox-
  plugin-for-improving-website-performance/
  YSlow - https://addons.mozilla.org/ru/firefox/addon/yslow/
 Инструменты минимизации
  AjaxMin - http://ajaxmin.codeplex.com/
  YUI Compressor - http://developer.yahoo.com/yui/compressor/
  JSMin
  … и многие другие
Вопросы?
          Внимательно слушаю! 
                  Андрей Кулешов
                  «Деловые решения»
                  Директор
akuleshov@solforbiz.com            akuleshov.tula
http://www.solforbiz.com


Специально для http://GetDev.NET
Интересное чтение
 Best Practices for Speeding Up Your Web Site – Yahoo
  http://developer.yahoo.com/performance/rules.html
 Steve Souders – эксперт из Google
  http://www.stevesouders.com/
 Top 10 Client-Side Performance Problems in Web 2.0
  http://blog.dynatrace.com/2010/08/25/top-10-client-
  side-performance-problems-in-web-2-0/
Интересное видео
 Why Web Performance Matters - Richard Campbell
  http://channel9.msdn.com/Events/TechEd/NorthAmerica
  /2011/DEV344
 50 Performance Tricks to Make Your HTML5 Web Sites
  Faster - Jason Weber (Principal Program Manager Lead for
  Internet Explorer)
  http://channel9.msdn.com/events/MIX/MIX11/HTM01
 Повышение производительности клиентской части
  сайта с высокой нагрузкой – Евгений Чигиринский
  http://www.techdays.ru/videos/3708.html

Weitere ähnliche Inhalte

Ähnlich wie Web Client Performance

BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаBEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаDALEE digital agency
 
BEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendBEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendAlex Yaroshevich
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
технологические сценарии Windows azure
технологические сценарии Windows azureтехнологические сценарии Windows azure
технологические сценарии Windows azureExpolink
 
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...it-people
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendenciesDarkestMaster
 
Vladimir Unev
Vladimir UnevVladimir Unev
Vladimir UnevArchiOFF
 
Web matrix
Web matrixWeb matrix
Web matrix.toster
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningOdessaJS Conf
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMaria Kuneva
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveReturn on Intelligence
 
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshovelenae00
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеDenis Izmaylov
 
Кэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхКэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхForkConf
 
Tuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationTuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationShamim bhuiyan
 
Polymer - New Era of Web Development
Polymer - New Era of Web DevelopmentPolymer - New Era of Web Development
Polymer - New Era of Web DevelopmentAlexander Kirillov
 

Ähnlich wie Web Client Performance (20)

BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтендаBEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда
 
BEM for corporate sites — failover frontend
BEM for corporate sites — failover frontendBEM for corporate sites — failover frontend
BEM for corporate sites — failover frontend
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
технологические сценарии Windows azure
технологические сценарии Windows azureтехнологические сценарии Windows azure
технологические сценарии Windows azure
 
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...
DUMP-2012 - Только хардкор! - "Архитектура и запуск облачного сервиса в Amazo...
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Vladimir Unev
Vladimir UnevVladimir Unev
Vladimir Unev
 
Web matrix
Web matrixWeb matrix
Web matrix
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабирование
 
Кэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхКэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровнях
 
Tuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationTuning HighLoad J2EE web application
Tuning HighLoad J2EE web application
 
Polymer - New Era of Web Development
Polymer - New Era of Web DevelopmentPolymer - New Era of Web Development
Polymer - New Era of Web Development
 

Mehr von GetDev.NET

Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееGetDev.NET
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеGetDev.NET
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковGetDev.NET
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКGetDev.NET
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013GetDev.NET
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego MindstormsGetDev.NET
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8GetDev.NET
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложенийGetDev.NET
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервисGetDev.NET
 

Mehr von GetDev.NET (20)

Go
GoGo
Go
 
Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущее
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучше
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиков
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
 
AngularJS
AngularJSAngularJS
AngularJS
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego Mindstorms
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервис
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 

Web Client Performance

  • 2. Про что мы говорим?  Страница  И множество связанных с ней ресурсов
  • 4. Насколько терпеливы пользователи? * Why Web Performance Matters (Richard Campbell)
  • 5. Три числа терпения  0.1 секунды После этой границы человек начинает замечать задержку  1 секунда На этой границе человек начинает подозревать, что с системой что-то не так. Теряется чувство прямого взаимодействия с компьютером  10 секунд «Время смерти» – человек начинает подозревать, что система не работает. Перезагружает страницу второй раз, переключается на другие задачи, идёт делать чай http://www.useit.com/papers/responsetime.html
  • 6. Изменение показателей при увеличении времени ожидания 0.00% -1.00% Percent change -2.00% -3.00% -4.00% -5.00% 50 200 500 1000 2000 Added delay Queries per visitor Query refinement Revenue per visitor Any clicks Satisfaction * Why Web Performance Matters (Richard Campbell)
  • 7. На что тратится время? Подсистемы Internet Explorer Marshalling Networking Formatting Collections Rendering JavaScript Building Layout HTML DOM Block CSS 50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
  • 8. На что тратится время? Средние значения для пяти новостных сайтов HTML Parsing CSS Parsing Collections JavaScript Marshalling Native OM Formatting BlockBuilding Layout Rendering 50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
  • 9. На что тратится время? Средние значения для нескольких AJAX-сайтов HTML Parsing CSS Parsing Collections JavaScript Marshalling Native OM Formatting BlockBuilding Layout Rendering 50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
  • 10. Кто же побеждает?  Побеждают не лучшие в чем-то одном  Побеждают те, кто последовательно хороши во всём: - объём информации для скачивания; - количество DOM-элементов; - количество CSS-правил - количество изображений; - количество блоков JavaScript-кода; - количество строк JavaScript-кода; - и те, кто всё это правильно использует.
  • 11. Начинается всё с Сети…  Несмотря на рост пропускной способности каналов, она все равно остаётся ограниченной  Особенно если учесть стремительно растущий рынок мобильных устройств  Поэтому два основных принципа: - уменьшаем количество ресурсов - уменьшаем размер ресурсов
  • 12. Чем меньше нужно скачать – тем лучше  Минимизируйте количество используемых ресурсов Не следует множить сущее без необходимости Уильям Оккам
  • 13. Избегайте перенаправлений Request Response GET / HTTP/1.1 HTTP/1.1 303 See Other Host: getdev.net Location: http://www.getdev.net/
  • 15. Сжатие на сервере Response details  Все современные браузеры HTTP/1.1 200 OK поддерживают приём сжатого Content-Encoding: содержимого (gzip, deflate) gzip Server: Microsoft-  Резко уменьшается объем IIS/7.5 передаваемых по сети данных  Поддерживается всеми основными серверами (IIS, Apache, nginx)  Единственный минус – процессорное время. Но он с лихвой перевешивается выигрышем в траффике.
  • 16. Кэширование Response details  Все ваши ресурсы с HTTP/1.1 200 OK меняющимся содержим не Content-Type: image/jpeg должны быть закэшированы Expires: Sat, 31 Oct  Все ваши ресурсы с 2020 00:00:00 GMT постоянным содержим Last-Modified: Mon, 10 Oct 2011 18:55:14 GMT должны быть закэшированы ETag: "1fc57257e871:0‚ навсегда Response details  ETag и Last-Modified HTTP/1.1 304 Not Modified  Регистр в названиях ресурсов Last-Modified: Mon, 10 icon.png и Icon.png – один Oct 2011 18:55:14 GMT файл, но два скачивания…
  • 18. Вынесение ресурсов на несколько доменов  Большинство getdev.netсовременных браузеров загружают с одного домена одновременно 6- 10 ресурсов  Распределив ресурсы по нескольким доменам – получим больше одновременных загрузок  Маленькая прибавка к img1.getdev.net производительности – на эти домены не будут пересылаться cookies при каждом запросу 50 Performance Tricks to Make Your HTML5 Web Sites Faster (Jason Weber)
  • 19. Использование Content Delivery Network (CDN)  Может быть использовано для статического контента (логотипы, картинки), и при некотором усердии – для динамического  Пользователь скачивает ресурс с сервера, наиболее близкого к нему  Если это популярная JS-библиотека – есть шанс, что у пользователя она уже скачана, и её не придётся качать заново
  • 20. Использование спрайтов  ImageSprite – одна большая картинка, которая содержит в себе множество маленьких  И множество CSS- правил, которые хранят координаты и размер каждой из них  Общий размер для скачивания уменьшается  Нужно скачать только один файл http://www.google.ru/intl/ru/options/ http://www.google.ru/options/i12.png http://css-tricks.com/158-css-sprites/
  • 22. Скачали данные – рендерим страницу  Что тоже нужно делать быстро  И иногда достаточно казаться, а не быть
  • 23. CSS-файлы – в начале страницы  Сразу же по получении CSS файла браузер начинает рендерить красивую картинку  Пользователь быстрее получает сайт, приближенный по виду и разметке к финальному состоянию  Загрузка других ресурсов при этом не блокируется
  • 24. Не делайте вложенных и встроенных CSS-стилей <html> <head>  Это очень просто и быстро – <title>Test</title> сделать стиль для одного- </head> <body> единственного элемента <style> .item { color:#009900;} встроенным в страницу </style> <div class=‘item’>  Но на этапе рендеринга это MyItem </div> ухудшает <div style=‘color:Red;’> MyItem 2 производительность </div> </body> </html>
  • 25. Используйте PNG, JPEG и JPEG-XR  JPEG – для фотографий  PNG – для всего остального  GIF – устаревший формат – занимает больше места, потребляет больше CPU  JPEG-XR – для фотографий высокого разрешения. Действительно высокого 
  • 26. … и показывайте их в реальном размере <!–- photo 800х600 -->  Скачиваем больше, чем <img width=‚80px‛ height=‚60px‛ нужно src=‚wallpaper.jpg‛ />  Тратим процессорное время на изменение размера  А ведь достаточно всего один раз изменить размер
  • 27. Используйте CSS 3 и HTML5 Поддерживается большинством современных браузеров  Для градиентов -ms-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333)) -webkit-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333)) -moz-gradient(linear, 50% 50%, 0% 34%, from(#666666), to(#666666), color-stop(.3,#333333))  Для скругления углов border-radius:18px; -webkit-border-radius: 100px; -moz-border-radius: 100px;  Для рисования на канве
  • 28. И теперь можно запускать скрипты  Запускать их лучше всего в тот момент, когда DOM уже полностью скачан. Внешние ресурсы в это время, скорее всего, ещё грузятся, но ждать их не имеет смысла
  • 29. JS-файлы – в конце страницы  Пока загружается и исполняется JavaScript файл – не производится ни скачивание, ни выполнение никаких других ресурсов (по стандарту. На практике, большинство браузеров скачивают ресурсы, но не выполняют их)  Поэтому сначала лучше дать загрузиться всему остальному, чтобы пользователь увидел страницу, и лишь затем лезть со своим программированием  Если очень-очень надо в начале – то помечаем аттрибутом defer (откладывающем выполнение)
  • 30. Кэшируйте обращение к DOM  $(“.class1”).show(); $(“.class1”).hide(); - два раза проходит по всему (возможно, очень большому!) дереву var x = $(“.class1”); x.show(); x.hide(); - почти в два раза эффективнее
  • 31. Изменение DOM  Если нужно внести изменения в страницу – сначала всё подготовьте, а потом уже один раз меняйте var content = getTitle() + getBody() + getFooter(); myControl.innerHtml = content;  innerHtml – самый быстрый способ сделать изменение
  • 32. Минимизируйте JavaScript /* this function is used to calculate sum of two numbers */ Function sumFunction (value1, value2) { var sum = value1 + value2; Return sum; } Минимизированный скрипт: function sum(a, b){return a + b;}  можно делать вручную (удачи)  можно делать в момент выкладывания приложения  можно делать во время исполнения приложения
  • 33. Используйте Web Workers var worker = new Worker("worker_script.js"); worker.postMessage("Hello World!");  Могут быть использованы для долговременных расчетов или для фоновых операций  Не замедляют пользовательский интерфейс
  • 34. Демо Минифицированный ЯваСкрипт  Cassette for ASP.NET MVC by Andrew Davey https://github.com/andrewdavey
  • 35. А можно как-то вот это всё автоматизировать?  Есть инструменты.  Встроенные средства разработчика во всех браузерах  Плагины от Гугла и Яху http://veerasundar.com/blog/2009/06/google-page-speed-firefox- plugin-for-improving-website-performance/ YSlow - https://addons.mozilla.org/ru/firefox/addon/yslow/  Инструменты минимизации AjaxMin - http://ajaxmin.codeplex.com/ YUI Compressor - http://developer.yahoo.com/yui/compressor/ JSMin … и многие другие
  • 36. Вопросы? Внимательно слушаю!  Андрей Кулешов «Деловые решения» Директор akuleshov@solforbiz.com akuleshov.tula http://www.solforbiz.com Специально для http://GetDev.NET
  • 37. Интересное чтение  Best Practices for Speeding Up Your Web Site – Yahoo http://developer.yahoo.com/performance/rules.html  Steve Souders – эксперт из Google http://www.stevesouders.com/  Top 10 Client-Side Performance Problems in Web 2.0 http://blog.dynatrace.com/2010/08/25/top-10-client- side-performance-problems-in-web-2-0/
  • 38. Интересное видео  Why Web Performance Matters - Richard Campbell http://channel9.msdn.com/Events/TechEd/NorthAmerica /2011/DEV344  50 Performance Tricks to Make Your HTML5 Web Sites Faster - Jason Weber (Principal Program Manager Lead for Internet Explorer) http://channel9.msdn.com/events/MIX/MIX11/HTM01  Повышение производительности клиентской части сайта с высокой нагрузкой – Евгений Чигиринский http://www.techdays.ru/videos/3708.html