Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Server optimization

396 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Server optimization

  1. 1. Почему сайт тормозит?● Лишний код ✔ Избыточное включение кода ✔ Избыточная функциональность ✔ Неоптимальный код● Лишняя нагрузка на БД ✔ Плохая структура данных ✔ Много запросов ✔ Неоптимальные запросы
  2. 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. 3. Избыточная функциональность Лишний код всегда делает что-то ненужное 1. Проблема: Зоопарк модулей Решение: Custom Development vs. Модули 2. Проблема: В друпале есть Alter! Решение: Конструктор vs. Alter 3. Проблема: Непонимание целей и задач Решение: Делать то, что нужно, а не искать похожее
  4. 4. Структура данных. Индексы Индексы нужны для: ● EXPLAIN SELECT - для● JOIN ON анализа запроса● WHERE ✔ Type = ALL !!!● ORDER BY● GROUP BY ● ANALYZE TABLE – для● HAVING обновления статистики
  5. 5. Много запросов. Конфиги● Не делать много таблиц для хранения конфигов● Хранить конфиги в более простых структурах● Стараться вычитывать все конфиги сразу, а не по одному✔ Использовать VARIABLES для конфигов✔ _drupal_bootstrap_variables – 0.130 c. (1000), 1.5 c. (6000)✔ Новостной портал ~800, соц. Сеть ~1200✔ JSON, Serialize
  6. 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. 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. 8. Неоптимальные запросыПлохо: Хорошо:SELECT id, (SELECT …) SELECT...WHERE id = (SELECT …) FROM table1 t1 JOIN (SELECT …) t2SORT 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 ANDWHERE subquery_where) oe_1 = ie_1 AND ... AND oe_N = ie_N)
  9. 9. СПАСИБО Simplicity is the key to happiness что в переводе означаетПишите мало качественного кода :) Много плохого кода не пишите

×