Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

1.806 Aufrufe

Veröffentlicht am

Доклад с конференции WordCamp Russia 2015

Veröffentlicht in: Präsentationen & Vorträge
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

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

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

×