SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Почему сайт тормозит?
●   Лишний код
    ✔   Избыточное включение кода
    ✔   Избыточная функциональность
    ✔   Неоптимальный код
●   Лишняя нагрузка на БД
    ✔   Плохая структура данных
    ✔   Много запросов
    ✔   Неоптимальные запросы
Избыточное включение кода
Оказывается INCLUDE тоже занимает какое-то время!

  Проблема: Избыточность кода в файлах *.module
  Решение:   Выносить максимум кода из *.module в *.inc


  Путь             Bootstrap FULL    Render
  <front>          300-400           2500-3500
  <front> cache    250-350           -
  User form page   200-400           500-1500
  Ajax callback    200-400           30-1500
Избыточная функциональность
   Лишний код всегда делает что-то ненужное


  1.
       Проблема: Зоопарк модулей
       Решение:   Custom Development vs. Модули



  2.
       Проблема: В друпале есть Alter!
       Решение:   Конструктор vs. Alter



  3.
       Проблема: Непонимание целей и задач
       Решение:   Делать то, что нужно, а не искать похожее
Структура данных. Индексы
    Индексы нужны для:   ●   EXPLAIN SELECT - для
●   JOIN ON                  анализа запроса
●   WHERE
                             ✔   Type = ALL !!!
●   ORDER BY
●   GROUP BY             ●   ANALYZE TABLE – для
●   HAVING                   обновления статистики
Много запросов. Конфиги
●   Не делать много таблиц для хранения конфигов
●   Хранить конфиги в более простых структурах
●   Стараться вычитывать все конфиги сразу, а не по одному



✔   Использовать VARIABLES для конфигов
✔   _drupal_bootstrap_variables – 0.130 c. (1000), 1.5 c. (6000)
✔   Новостной портал ~800, соц. Сеть ~1200
✔   JSON, Serialize
Много запросов. Кеш
    Плохо:
●   foreach () { SELECT }
●   Часто вызываемая функция с одинаковым запросом
●   Несколько повторяющихся запросов

    Хорошо:
    $cache = &drupal_static(__FUNCTION__);         // ИЛИ cache_get()
    if (count($cache) = 0) {
        $cache = db_query("SELECT ...")->fetchAllKeyed();   // cache_set()
    }
    return !empty($cache[$var]) ? $cache[$var]) : '';
Много запросов. entity_load()
Плохо:                             Хорошо:
foreach ($entities as $e) {        foreach ($entities as $e) {
    entity_load(array($e->nid));       $ids[] = $e->id;

}                                  }
                                   entity_load($ids);

foreach ($rows as $row) {
                                   foreach ($rows as $row) {
    node_load($row->nid);
                                       $nids[] = $row->nid;
}
                                   }
                                   node_load_multiple($nids);
Неоптимальные запросы
Плохо:                         Хорошо:
SELECT id, (SELECT …)          SELECT...

WHERE id = (SELECT …)            FROM table1 t1 JOIN
                                 (SELECT …) t2
SORT BY (SELECT ...)
                                    ON t1.id = t2.id ...

Плохо:                         Хорошо:
(oe_1, ..., oe_N) IN (SELECT   EXISTS (SELECT 1 FROM ...
ie_1, ..., ie_N FROM ...       WHERE subquery_where AND
WHERE subquery_where)          oe_1 = ie_1 AND ...
                               AND oe_N = ie_N)
СПАСИБО

 Simplicity is the key to happiness

           что в переводе означает



Пишите мало качественного кода :)
                         Много плохого кода не пишите

Weitere ähnliche Inhalte

Was ist angesagt?

YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
 
Функциональные тесты на Perl
Функциональные тесты на PerlФункциональные тесты на Perl
Функциональные тесты на PerlIlya Zelenchuk
 
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupalYury Glushkov
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБДRoman Brovko
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregationAcceptic
 
Haskell - huge presentation for DevDay about Haskell language
Haskell - huge presentation for DevDay about Haskell languageHaskell - huge presentation for DevDay about Haskell language
Haskell - huge presentation for DevDay about Haskell languageAlexander Granin
 
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJedi
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJediD8 - Serialize, Normalize - Михаил Крайнюк, DrupalJedi
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJediDrupalSib
 
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)ygoltsev
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Yandex
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWPositive Hack Days
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPavel Vlasov
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 

Was ist angesagt? (20)

YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
 
Функциональные тесты на Perl
Функциональные тесты на PerlФункциональные тесты на Perl
Функциональные тесты на Perl
 
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupal
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
Mongo db aggregation
Mongo db aggregationMongo db aggregation
Mongo db aggregation
 
циклы
циклыциклы
циклы
 
Haskell - huge presentation for DevDay about Haskell language
Haskell - huge presentation for DevDay about Haskell languageHaskell - huge presentation for DevDay about Haskell language
Haskell - huge presentation for DevDay about Haskell language
 
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJedi
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJediD8 - Serialize, Normalize - Михаил Крайнюк, DrupalJedi
D8 - Serialize, Normalize - Михаил Крайнюк, DrupalJedi
 
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
 
Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»Алексей Бережной — «jQuery»
Алексей Бережной — «jQuery»
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
 
PHP basic
PHP basicPHP basic
PHP basic
 
Javascript
JavascriptJavascript
Javascript
 

Andere mochten auch

10 strange issues in Drupal or why clients don't like Drupal
10 strange issues in Drupal or why clients don't like Drupal10 strange issues in Drupal or why clients don't like Drupal
10 strange issues in Drupal or why clients don't like DrupalYury Glushkov
 
Removing superfluous page loads, or a few more words about popups and ajax
Removing superfluous page loads, or a few more words about popups and ajaxRemoving superfluous page loads, or a few more words about popups and ajax
Removing superfluous page loads, or a few more words about popups and ajaxYury Glushkov
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupalYury Glushkov
 
Create payment systems for Drupal Commerce
Create payment systems for Drupal CommerceCreate payment systems for Drupal Commerce
Create payment systems for Drupal CommerceYury Glushkov
 
Enfoque clásico de la administración
Enfoque clásico de la administraciónEnfoque clásico de la administración
Enfoque clásico de la administraciónGuillermo A.
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting PersonalKirsty Hulse
 

Andere mochten auch (8)

10 strange issues in Drupal or why clients don't like Drupal
10 strange issues in Drupal or why clients don't like Drupal10 strange issues in Drupal or why clients don't like Drupal
10 strange issues in Drupal or why clients don't like Drupal
 
Removing superfluous page loads, or a few more words about popups and ajax
Removing superfluous page loads, or a few more words about popups and ajaxRemoving superfluous page loads, or a few more words about popups and ajax
Removing superfluous page loads, or a few more words about popups and ajax
 
Drupal vs ubercart
Drupal vs ubercartDrupal vs ubercart
Drupal vs ubercart
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
 
Create payment systems for Drupal Commerce
Create payment systems for Drupal CommerceCreate payment systems for Drupal Commerce
Create payment systems for Drupal Commerce
 
Enfoque CláSico
Enfoque CláSicoEnfoque CláSico
Enfoque CláSico
 
Enfoque clásico de la administración
Enfoque clásico de la administraciónEnfoque clásico de la administración
Enfoque clásico de la administración
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 

Ähnlich wie Server optimization

PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Pavel Novitsky
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debuggingaheadWorks
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLНародные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLNikolay Pisarev
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)Ontico
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Ontico
 
QA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverageQA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverageQAFest
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 
Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Alexander Gornik
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 

Ähnlich wie Server optimization (20)

PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLНародные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)SQL Tricky (Иван Фролков)
SQL Tricky (Иван Фролков)
 
Иван Фролков. Tricky SQL
Иван Фролков. Tricky SQLИван Фролков. Tricky SQL
Иван Фролков. Tricky SQL
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)
 
QA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverageQA Fest 2017. Иван Цыганов. Не смешите мой coverage
QA Fest 2017. Иван Цыганов. Не смешите мой coverage
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
Разработка бизнес приложений (5)
Разработка бизнес приложений (5)Разработка бизнес приложений (5)
Разработка бизнес приложений (5)
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 

Server optimization

  • 1. Почему сайт тормозит? ● Лишний код ✔ Избыточное включение кода ✔ Избыточная функциональность ✔ Неоптимальный код ● Лишняя нагрузка на БД ✔ Плохая структура данных ✔ Много запросов ✔ Неоптимальные запросы
  • 2. Избыточное включение кода Оказывается INCLUDE тоже занимает какое-то время! Проблема: Избыточность кода в файлах *.module Решение: Выносить максимум кода из *.module в *.inc Путь Bootstrap FULL Render <front> 300-400 2500-3500 <front> cache 250-350 - User form page 200-400 500-1500 Ajax callback 200-400 30-1500
  • 3. Избыточная функциональность Лишний код всегда делает что-то ненужное 1. Проблема: Зоопарк модулей Решение: Custom Development vs. Модули 2. Проблема: В друпале есть Alter! Решение: Конструктор vs. Alter 3. Проблема: Непонимание целей и задач Решение: Делать то, что нужно, а не искать похожее
  • 4. Структура данных. Индексы Индексы нужны для: ● EXPLAIN SELECT - для ● JOIN ON анализа запроса ● WHERE ✔ Type = ALL !!! ● ORDER BY ● GROUP BY ● ANALYZE TABLE – для ● HAVING обновления статистики
  • 5. Много запросов. Конфиги ● Не делать много таблиц для хранения конфигов ● Хранить конфиги в более простых структурах ● Стараться вычитывать все конфиги сразу, а не по одному ✔ Использовать VARIABLES для конфигов ✔ _drupal_bootstrap_variables – 0.130 c. (1000), 1.5 c. (6000) ✔ Новостной портал ~800, соц. Сеть ~1200 ✔ JSON, Serialize
  • 6. Много запросов. Кеш Плохо: ● foreach () { SELECT } ● Часто вызываемая функция с одинаковым запросом ● Несколько повторяющихся запросов Хорошо: $cache = &drupal_static(__FUNCTION__); // ИЛИ cache_get() if (count($cache) = 0) { $cache = db_query("SELECT ...")->fetchAllKeyed(); // cache_set() } return !empty($cache[$var]) ? $cache[$var]) : '';
  • 7. Много запросов. entity_load() Плохо: Хорошо: foreach ($entities as $e) { foreach ($entities as $e) { entity_load(array($e->nid)); $ids[] = $e->id; } } entity_load($ids); foreach ($rows as $row) { foreach ($rows as $row) { node_load($row->nid); $nids[] = $row->nid; } } node_load_multiple($nids);
  • 8. Неоптимальные запросы Плохо: Хорошо: SELECT id, (SELECT …) SELECT... WHERE id = (SELECT …) FROM table1 t1 JOIN (SELECT …) t2 SORT BY (SELECT ...) ON t1.id = t2.id ... Плохо: Хорошо: (oe_1, ..., oe_N) IN (SELECT EXISTS (SELECT 1 FROM ... ie_1, ..., ie_N FROM ... WHERE subquery_where AND WHERE subquery_where) oe_1 = ie_1 AND ... AND oe_N = ie_N)
  • 9. СПАСИБО Simplicity is the key to happiness что в переводе означает Пишите мало качественного кода :) Много плохого кода не пишите