7 убийц производительности WordPress
-
Upload
konstantin-kovshenin -
Category
Presentations & Public Speaking
-
view
1.136 -
download
5
Transcript of 7 убийц производительности WordPress
![Page 1: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/1.jpg)
7 убийцпроизводительностиWordPressКонстантин Ковшенин
![Page 2: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/2.jpg)
session_start() 1
![Page 3: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/3.jpg)
Set-Cookie: PHPSESSID=hash
Hash — уникальное значение для каждого посетителя.
![Page 4: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/4.jpg)
session_set_save_handler()
Позволяет использовать произвольный механизм для хранения сессий, напримерRedis или MySQL.
![Page 5: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/5.jpg)
Cookies + JS + AJAX
![Page 6: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/6.jpg)
rand() 2
![Page 7: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/7.jpg)
script.js?v=rand()
Браузер не может использовать файл из кэша если адрес будет каждый раз меняться.
![Page 8: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/8.jpg)
Где 20150815 дата последнего изменения файла, или инкрементируемое число.Можно также использовать mtime().
script.js?v=20150815
![Page 9: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/9.jpg)
Как правило полное сканирование всей таблицы, часто с использованием временных таблиц на диске.
ORDER BY RAND()
![Page 10: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/10.jpg)
Не попадают под кэш запросов MySQL.
RAND(), NOW(),UNIX_TIMESTAMP()
![Page 11: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/11.jpg)
SELECT ID FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date >= '2015-06-15' LIMIT 50;
![Page 12: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/12.jpg)
$p = my_get_posts_from_cache();$p = shuffle( $p ); // RAND()$p = array_slice( $p, 0, 10 );
При необходимости кэшируйте в PHP.
![Page 13: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/13.jpg)
SELECT * FROM wp_posts WHERE ID >=( SELECT FLOOR(( MAX(ID) - MIN(ID) + 1 ) * RAND()) + MIN(ID) FROM wp_posts ) LIMIT 1;
![Page 14: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/14.jpg)
wp_cron() 3
![Page 15: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/15.jpg)
Отключить запуск Cron по умолчанию можно с помощью директивы DISABLE_WP_CRON.
/etc/cron.d/wp-cron*/15 * * * * user php wp-cron.php
![Page 16: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/16.jpg)
wp_options 4
![Page 17: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/17.jpg)
Сколько запросов в MySQL?
get_option( 'home' );get_option( 'home' );get_option( 'home' );
![Page 18: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/18.jpg)
get_option( 'home' );get_option( 'home' );get_option( 'home' );
Сколько запросов в MySQL?Ответ: 0.
![Page 19: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/19.jpg)
wp_load_alloptions()
Одним запросом загружает все опции с флагом autoload в кэш объектов (память).
![Page 20: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/20.jpg)
CREATE TABLE wp_options ( option_id bigint(20), option_name varchar(64), option_value longtext, autoload varchar(20),);
![Page 21: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/21.jpg)
SELECT option_name, LENGTH(option_value) FROM wp_options WHERE autoload = 'yes';
![Page 22: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/22.jpg)
add_option( $name, $value $deprecated, $autoload );
$autoload — должна ли опция загружаться автоматически: yes/no.
![Page 23: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/23.jpg)
meta_query 5
![Page 24: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/24.jpg)
CREATE TABLE wp_postmeta ( meta_id bigint(20), post_id bigint(20), meta_key varchar(255), meta_value longtext,);
![Page 25: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/25.jpg)
CREATE INDEX meta_value ON wp_postmeta(meta_value(16));
![Page 26: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/26.jpg)
CREATE INDEX meta_key_value ON wp_postmeta( meta_key, meta_value(16) );
![Page 27: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/27.jpg)
EXPLAIN SELECT * FROM wp_postmeta WHERE meta_key = 'foo' AND meta_value LIKE '%bar%';
![Page 28: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/28.jpg)
Elasticsearch
Очень быстрый сервер для индексации и поиска с учетом морфологии, опечаток и т.д. Хорошо работает с плагином ElasticPress.
![Page 29: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/29.jpg)
wp_remote_* 6
![Page 30: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/30.jpg)
function my_get_weather( $city ) { $weather = wp_remote_get( ... ); return $weather;}
![Page 31: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/31.jpg)
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;}
![Page 32: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/32.jpg)
TLC Transients
Транзитный кэш с фоновым обновлением.
![Page 33: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/33.jpg)
*.conf 7
![Page 34: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/34.jpg)
nginx.conf
worker_processeskeepalive_*gzipexpires
![Page 35: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/35.jpg)
php-fpm.conf
pm = static/dynamic/ondemandpm.max_childrenlisten.backlog
![Page 36: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/36.jpg)
my.cnf
innodb_buffer_pool_sizequery_cache_sizemax_connections
![Page 37: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/37.jpg)
Кэшируемость
Насколько эффективными являются использованные методы кэширования.
![Page 38: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/38.jpg)
ab, siege
Симулируют активность на сайте, позволяют измерить максимальное количество запросов в секунду. См. также loader.io.
![Page 39: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/39.jpg)
xhprof, xdebug
Инструменты для профилирования PHP кода, позволяют найти самые медленные функции.
![Page 40: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/40.jpg)
log_slow_queries
Позволяет найти медленные запросы в MySQL. См. также mysqlreport, mysqltuner.pl
![Page 41: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/41.jpg)
iperf, fio
Измерение скорости передачи данных по сети, скорости чтения/записи на диск.См. также iotop, iftop.
![Page 42: 7 убийц производительности WordPress](https://reader030.fdocuments.net/reader030/viewer/2022020108/58f0144e1a28ab8c428b4603/html5/thumbnails/42.jpg)
kovshenin.com/wcrus2015