SlideShare a Scribd company logo
1 of 42
Download to read offline
7убийц
производительности
WordPress
КонстантинКовшенин
session_start()
Set-Cookie: PHPSESSID=hash
Hash—уникальноезначениедлякаждого
посетителя.
session_set_save_handler()
Позволяетиспользоватьпроизвольный
механизмдляхранениясессий,например
RedisилиMySQL.
Cookies + JS + AJAX
rand()
script.js?v=rand()
Браузернеможетиспользоватьфайлизкэша
еслиадресбудеткаждыйразменяться.
Где20150815датапоследнегоизменения
файла,илиинкрементируемоечисло.
Можнотакжеиспользоватьmtime().
script.js?v=20150815
Какправилополноесканированиевсей
таблицы,частосиспользованиемвременных
таблицнадиске.
ORDER BY RAND()
НепопадаютподкэшзапросовMySQL.
RAND(), NOW(),
UNIX_TIMESTAMP()
SELECT ID FROM wp_posts WHERE
post_type = 'post' AND
post_status = 'publish' AND
post_date >= '2015-06-15'
LIMIT 50;
$p = my_get_posts_from_cache();
$p = shuffle( $p ); // RAND()
$p = array_slice( $p, 0, 10 );
ПринеобходимостикэшируйтевPHP.
SELECT * FROM wp_posts WHERE ID >=
( SELECT FLOOR(( MAX(ID) - MIN(ID)
+ 1 ) * RAND()) + MIN(ID)
FROM wp_posts ) LIMIT 1;
wp_cron()
ОтключитьзапускCronпоумолчаниюможно
спомощьюдирективыDISABLE_WP_CRON.
/etc/cron.d/wp-cron
*/15 * * * * user php wp-cron.php
wp_options
СколькозапросоввMySQL?
get_option( 'home' );
get_option( 'home' );
get_option( 'home' );
get_option( 'home' );
get_option( 'home' );
get_option( 'home' );
СколькозапросоввMySQL?
Ответ:0.
wp_load_alloptions()
Однимзапросомзагружаетвсеопциис
флагомautoloadвкэшобъектов(память).
CREATE TABLE wp_options (
option_id bigint(20),
option_name varchar(64),
option_value longtext,
autoload varchar(20),
);
SELECT option_name,
LENGTH(option_value)
FROM wp_options
WHERE autoload = 'yes';
add_option( $name, $value
$deprecated, $autoload );
$autoload—должналиопциязагружаться
автоматически:yes/no.
meta_query
CREATE TABLE wp_postmeta (
meta_id bigint(20),
post_id bigint(20),
meta_key varchar(255),
meta_value longtext,
);
CREATE INDEX meta_value ON
wp_postmeta(meta_value(16));
CREATE INDEX meta_key_value ON
wp_postmeta(
meta_key, meta_value(16)
);
EXPLAIN SELECT *
FROM wp_postmeta
WHERE meta_key = 'foo' AND
meta_value LIKE '%bar%';
Elasticsearch
Оченьбыстрыйсервердляиндексациии
поискасучетомморфологии,опечатокит.д.
ХорошоработаетсплагиномElasticPress.
wp_remote_*
function my_get_weather( $city ) {
$weather = wp_remote_get( ... );
return $weather;
}
function my_get_weather( $city ) {
$key = md5( 'weather-' . $city );
if ( $cache = get_transient( $key ) )
return $cache;
$weather = wp_remote_get( ... );
set_transient( $key, $weather, 3600 );
return $weather;
}
TLC Transients
Транзитныйкэшсфоновымобновлением.
*.conf
nginx.conf
worker_processes
keepalive_*
gzip
expires
php-fpm.conf
pm = static/dynamic/ondemand
pm.max_children
listen.backlog
my.cnf
innodb_buffer_pool_size
query_cache_size
max_connections
Кэшируемость
Насколькоэффективнымиявляются
использованныеметодыкэширования.
ab, siege
Симулируютактивностьнасайте,позволяют
измеритьмаксимальноеколичествозапросов
всекунду.См.такжеloader.io.
xhprof, xdebug
ИнструментыдляпрофилированияPHPкода,
позволяютнайтисамыемедленныефункции.
log_slow_queries
Позволяетнайтимедленныезапросыв
MySQL.См.такжеmysqlreport,mysqltuner.pl
iperf, fio
Измерениескоростипередачиданныхпо
сети,скоростичтения/записинадиск.
См.такжеiotop,iftop.
kovshenin.com/wcrus2015

More Related Content

What's hot

"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12
"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12
"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12MoscowJS
 
Произвольная смена дизайна системного скроллбара
Произвольная смена дизайна системного скроллбараПроизвольная смена дизайна системного скроллбара
Произвольная смена дизайна системного скроллбараDevDay
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleYandex
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомAlexander Titov
 
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...Coub
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...AvitoTech
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаВладимир Колос
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4akrakovetsky
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoveryМихаил Тюрин
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregationAcceptic
 
Высокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comВысокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comAlexandr Yatsuk
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoit-people
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 

What's hot (20)

Redis in live
Redis in liveRedis in live
Redis in live
 
Node
NodeNode
Node
 
"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12
"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12
"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12
 
Произвольная смена дизайна системного скроллбара
Произвольная смена дизайна системного скроллбараПроизвольная смена дизайна системного скроллбара
Произвольная смена дизайна системного скроллбара
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайта
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregation
 
Wordpress Cron
Wordpress CronWordpress Cron
Wordpress Cron
 
Высокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comВысокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.com
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 

Viewers also liked

Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Почему HTTPS соединение необходимо реализовать на Вашем сайте?Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Почему HTTPS соединение необходимо реализовать на Вашем сайте?Alexey Vidanov
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPressKonstantin Kovshenin
 
Цикл разработки WordPress
Цикл разработки WordPressЦикл разработки WordPress
Цикл разработки WordPressKonstantin Kovshenin
 
Пожиратели памяти в WordPress
Пожиратели памяти в WordPressПожиратели памяти в WordPress
Пожиратели памяти в WordPressKonstantin Kovshenin
 
WordPress под нагрузкой: масштабирование и отказоустойчивость
WordPress под нагрузкой: масштабирование и отказоустойчивостьWordPress под нагрузкой: масштабирование и отказоустойчивость
WordPress под нагрузкой: масштабирование и отказоустойчивостьKonstantin Kovshenin
 

Viewers also liked (9)

Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Почему HTTPS соединение необходимо реализовать на Вашем сайте?Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Почему HTTPS соединение необходимо реализовать на Вашем сайте?
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPress
 
Цикл разработки WordPress
Цикл разработки WordPressЦикл разработки WordPress
Цикл разработки WordPress
 
Пожиратели памяти в WordPress
Пожиратели памяти в WordPressПожиратели памяти в WordPress
Пожиратели памяти в WordPress
 
The Settings API
The Settings APIThe Settings API
The Settings API
 
WordPress под нагрузкой: масштабирование и отказоустойчивость
WordPress под нагрузкой: масштабирование и отказоустойчивостьWordPress под нагрузкой: масштабирование и отказоустойчивость
WordPress под нагрузкой: масштабирование и отказоустойчивость
 
Memory Management in WordPress
Memory Management in WordPressMemory Management in WordPress
Memory Management in WordPress
 
P2
P2P2
P2
 
Секреты WP_Query
Секреты WP_QueryСекреты WP_Query
Секреты WP_Query
 

Similar to 7 убийц производительности WordPress

Максим Кочкин (Wamba)
Максим Кочкин (Wamba)Максим Кочкин (Wamba)
Максим Кочкин (Wamba)Ontico
 
Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)Maksim Kochkin
 
Кэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхКэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхForkConf
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибкиAndrey Karpov
 
Moscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterMoscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterConstantin Kichinsky
 
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheУскоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheIgor Sazonov
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
Делаем очередь поверх Кассандры
Делаем очередь поверх КассандрыДелаем очередь поверх Кассандры
Делаем очередь поверх КассандрыDotNetConf
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 

Similar to 7 убийц производительности WordPress (13)

Максим Кочкин (Wamba)
Максим Кочкин (Wamba)Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
 
Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)Web application security (RIT 2014, rus)
Web application security (RIT 2014, rus)
 
Кэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровняхКэширование в Веб разработке на серверном и клиентском уровнях
Кэширование в Веб разработке на серверном и клиентском уровнях
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Moscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterMoscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project Westminster
 
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheУскоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Делаем очередь поверх Кассандры
Делаем очередь поверх КассандрыДелаем очередь поверх Кассандры
Делаем очередь поверх Кассандры
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в коде
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 

More from Konstantin Kovshenin

Будущее WordPress (SPB, 2014)
Будущее WordPress (SPB, 2014)Будущее WordPress (SPB, 2014)
Будущее WordPress (SPB, 2014)Konstantin Kovshenin
 
Road to Platform @ WordPress.com VIP Workshop 2014
Road to Platform @ WordPress.com VIP Workshop 2014Road to Platform @ WordPress.com VIP Workshop 2014
Road to Platform @ WordPress.com VIP Workshop 2014Konstantin Kovshenin
 
Как повысить скорость вашего сайта на WordPress
Как повысить скорость вашего сайта на WordPressКак повысить скорость вашего сайта на WordPress
Как повысить скорость вашего сайта на WordPressKonstantin Kovshenin
 
Things I Wish I Had Known Before Developing a WordPress Theme
Things I Wish I Had Known Before Developing a WordPress ThemeThings I Wish I Had Known Before Developing a WordPress Theme
Things I Wish I Had Known Before Developing a WordPress ThemeKonstantin Kovshenin
 
7 Tips for Better WordPress Theme Development
7 Tips for Better WordPress Theme Development7 Tips for Better WordPress Theme Development
7 Tips for Better WordPress Theme DevelopmentKonstantin Kovshenin
 

More from Konstantin Kovshenin (8)

Scaling out with WordPress
Scaling out with WordPressScaling out with WordPress
Scaling out with WordPress
 
Будущее WordPress (SPB, 2014)
Будущее WordPress (SPB, 2014)Будущее WordPress (SPB, 2014)
Будущее WordPress (SPB, 2014)
 
Road to Platform @ WordPress.com VIP Workshop 2014
Road to Platform @ WordPress.com VIP Workshop 2014Road to Platform @ WordPress.com VIP Workshop 2014
Road to Platform @ WordPress.com VIP Workshop 2014
 
Будущее WordPress
Будущее WordPressБудущее WordPress
Будущее WordPress
 
Templating WordPress
Templating WordPressTemplating WordPress
Templating WordPress
 
Как повысить скорость вашего сайта на WordPress
Как повысить скорость вашего сайта на WordPressКак повысить скорость вашего сайта на WordPress
Как повысить скорость вашего сайта на WordPress
 
Things I Wish I Had Known Before Developing a WordPress Theme
Things I Wish I Had Known Before Developing a WordPress ThemeThings I Wish I Had Known Before Developing a WordPress Theme
Things I Wish I Had Known Before Developing a WordPress Theme
 
7 Tips for Better WordPress Theme Development
7 Tips for Better WordPress Theme Development7 Tips for Better WordPress Theme Development
7 Tips for Better WordPress Theme Development
 

7 убийц производительности WordPress