Ускоряване на
World Wide Wait
Здравейте
Петър Николов
Peter Nikolow
Можете да ме намерите:
twitter.com/peternikolow
facebook.com/peter.nikolow
linkedin.com/in/peternikolow
plus.google.com/+peternikolow
“We must deliver and render the
above the fold (ATF )content in
under one second, which allows the
user to begin interacting with the
page as soon as possible
https://developers.google.com/speed/docs/insights/mobile
Рендиране на мобилна
страница за 1 секунда
DNS
преобразуване
Рендиране от
браузъра
Сървърна
обработка
HTTP заявка
и отговор
TCP
свързване
200 ms 200 ms200 ms 200 ms 200 ms
600 ms идващи от 3G мрежата които не
може да бъдат оптимизирани
400 ms които може да
бъдат оптимизирани от
Вас
https://developers.google.com/speed/docs/insights/mobile
Да поговорим протоколно?
С протоколите по протоколски
1.
DNS
Пътят към бързия WEB започва със DNS
DNS
▷ премахване low TTL
минимум ден TTL
▷ географски близо до
клиентите
▷ избягване на екзотиките
.ly, .tv, .guru
▷ ненадежни регистратори
DNS ▷ капацитет
DNS
▷ избягване на cname записи
dig +norec +trace cdn.
mobiliodevelopment.com
DNS
▷ резервен план
2.
TCP
Нека да ускорим мрежовия протокол
TCP
▷ създаден преди
40 години - 1974
▷ TCP slow start
○ IW3 -> IW10
TCP
▷ TCP slow start
TCP
▷ TCP efficiency
○ Nagle -> TCP_NODELAY
○ TCP_CORK -> TCP_CORK OFF
▷ Retransmission timeout (RTO)
○ 3 s -> 1s
▷ PRR - proportional rate reduction
▷ TLP - tail lost probe
▷ ER - early retransmit
TCP
▷ TCP handshake
○ 3 way handshake
client server
SYN
ACK
Request
SYN-ACK
Response
TCP
▷ New TCP handshake
○ TCP fast open
○ TFO cookie
client server
SYN +
TFO
cookie
request
ACK
SYN-
ACK+
TFO
cookie
SYN +
TFO +
Request SYN-ACK
Request
sent to
app
ACK
Response
...
3.
HTTP
Проблеми във приложения протокол
HTTP
▷ Версия 1.0 създадена 89/90
▷ Версия 1.1 създадена 95
▷ изцяло текстов
▷ може да се компресира
отговора
▷ създава много връзки към
сървъра
HTTP типове на връзката
Close
връзката се затваря
Keep-alive
постоянна връзка
Pipeline
постоянна връзка на
стероиди
client server
request
response
close
client server client server
HTTP/2
Вече е стандарт
HTTP/2
▷ винаги включени pipeline и
keep-alive
▷ компресира заявката и
хедърите на отговора
▷ вече е двоичен и е само
една връзка
HTTP/2
▷ server hint
▷ server push
▷ приоритизиране на
съдържанието
27%-60%
По-бързо рендира страниците във сравнение
със HTTP/1.1; без криптиране на връзката
40%
По-малко пакети във сравнение със HTTP/1.1
39%-55%
По-бързо рендира страниците във сравнение
със HTTP/1.1 (некриптирано) при криптиране
https://www.chromium.org/spdy/spdy-whitepaper
4.
TLS
Все още ли е причина за забавяне?
“On our production frontend machines (Google),
SSL/TLS accounts for less than 1% of the CPU load,
less than 10 KB of memory per connection and less
than 2% of network overhead. Many people believe
that SSL/TLS takes a lot of CPU time and we hope
the preceding numbers will help to dispel that.
https://www.imperialviolet.org/2010/06/25/overclocking-ssl.html
TLS
▷ SSL е мъртъв! Да живее TLS!
▷ SNI
▷ сертификати само от CA
▷ безплатни сертификати
○ StartSSL
○ Let’s encrypt
TLS
▷ забранете компресията
▷ TLS handshake - ECDH
▷ HSTS
○ HTTP strict transport security
▷ TLS подновяване на сесията
○ session identifiers - стар
○ session tickets - нов
▷ TLS false start
▷ OCSP stapling
QUIC
Quick UDP Internet Connections
Нов приложен протокол който може да
измести TCP
Желязната стража
зад желязната завеса
5.
HTTP server
И обичайните заподозрени за
забавянията
HTTP servers
▷ Apache
▷ nginx
▷ lighthttpd
▷ litespeed
HTTP servers
▷ .htaccess правила
○ използвайте статични правила
във секцията на сървъра
▷ компресия - deflate/gzip
○ компресирайте статичните
файлове
▷ редиректи
○ редирект map file
○ плъгин
▷ сървърно API за езиците
○ CGI, FastCGI, вграден модул
HTTP accelerators
▷ Varnish
▷ nginx reverse proxy
▷ nginx micro cache
PHP
▷ PHP 5.2, 5.3 са EOL
▷ PHP 5.4 тази година EOL
▷ скорост
○ по-новите версии са по-бързи
○ 5.2 -> 5.5 20%-35% по-бързи
▷ памет
○ новите версии имат по-малка
консумация
○ 5.2 -> 5.5 до 50% по-малко
https://wordpress.org/about/stats/
PHP
▷ opcode cache
○ APC - до 5.4
○ Xcache
○ Zend Opcache (PHP 5.5+)
PHP
Наличен
в кеша?
Изпълнение
Обработка Компилиране Запазване
Зарежданеда
не
PHP
▷ бъдещето
○ HHVM
○ PHPNG (PHP 7)
PHP7
Версия 7 се очаква да излезе Юли 2015
като RC и финална Октомври 2015.
Ускорението е около 100%
MySQL
▷ оптимизиране
○ mysqltuner
MySQL
Версия 5.5+ е по-бърза от всички
досегашни.
6.
Wordpress
Защо се бави?
WordPress
▷ преминете на последната
версия
▷ проверете дали темата не ви
бави
○ query monitor
▷ проверете дали не ви бави
плъгин
○ p3 profiler
○ query monitor
WordPress
▷ изключете
pingbacks/trackbacks
▷ проверете за XML-RPC атаки
▷ заключете wp-login.php със
парола
▷ премахнете излишните
плъгини
WordPress
▷ използвайте по-добри
версии на плъгините
▷ инсталирайте кеш
○ HCE - Martin Lazarov
○ WP Super Cache - Samuel Wood
○ W3TC - Frederick Townes
○ проверете редиректите
○ проверете 404 грешките
▷ инсталирайте плъгин за
архивиране
WordPress DB
▷ EAV модел за съхранение
○ entity, attribute, value
▷ премахнете черновите
постове
▷ премахнете спам
коментарите
▷ оптимизирайте таблиците
○ SQL - optimize table
WordPress DB
▷ наблюдавайте внимателно
следните таблици
○ wp_options
○ wp_postmeta
○ wp_commentmeta
▷ направете си тестов сървър
за експерименти
○ DB 1.1Gb -> 215 Mb
Client side
Оптимизация от клиентска страна
Благодаря!
Въпроси?
Можете да ме намерите на:
@peternikolow

Ускоряване на World Wide Wait