Як ви покращуєте продуктивність Drupal?


54

Drupal швидко розвивається, але продуктивність настільки погана. Важко досягти 50 запитів за секунду.

І стільки запитів SQL на простій веб-сторінці. Якщо ви перевірите час запиту на подачу форми на Drupal.org, для завершення завжди знадобиться кілька секунд.

Як ви покращуєте швидкість роботи свого веб-сайту?


3
Ви насправді шукали сайт? Я не уявляю, що про це раніше не говорили багато разів.
Летаріон

1
Оформити замовлення моїх слайдів goo.gl/30yi39 має допомогти вам
mikeytown2

Відповіді:


61

Кешування, кешування та кешування

Деякі пропозиції я раніше давав у подібному питанні

  1. Поставити Varnish або інший зворотний проксі перед вашим http-deamon - це, мабуть, найкраще, що ви можете зробити.
  2. Під час DrupalCon Copehagen, Расмус заявив, що використання кешу коду php-коду, наприклад APC , є однією з найкращих речей, які можна зробити для прискорення PHP в цілому. Продуктивність покращується з новішими версіями PHP. Також є додаткові переваги для оновлення PHP при оновленні Drupal. З 6 по 8 Drupal буде проходити через серйозний перехід до орієнтації на об'єкти, що також було більшістю підвищення продуктивності у нових версіях PHP.
  3. Memcache - популярний вибір для прискорення кешу, введення кеша в пам'ять замість диска.
  4. Панелі + Кешування в поєднанні з кеш-діями може значно підвищити продуктивність навіть для користувачів, які ввійшли в систему, оскільки він підтримує досить складну логіку.
  5. Entity Cache є хорошим і нульовим конф підвищення швидкості для будь-якого використання Drupal 7.
  6. На важких сайтах для запису є менше «добре налагоджених» рішень. Деякі варіанти включають.
    1. Переміщення часто пише повністю, наприклад статистику, десь в іншому місці, наприклад, Google Analytics.
    2. Кешування частої операції запису з користувацьким рішенням у чомусь на зразок NodeJS, який буде писати в БД раз на X-ту секунду.
    3. Приносьте в жертву священну ACID і використовуйте базу даних, як MongoDB . (Дивіться коментар Бердіра нижче)
    4. Кластеризуйте свою SQL-базу даних. Читає з однієї бази даних, пише в іншу. Це вроджене для D7, і Pressflow може допомогти з цим у D6.

Все це було додано, але все це для кешування читання, не добре для сайтів багато писати.
Брюс Ду

Ви нічого не сказали про записи. :) Я додам щось про це у своїй відповіді.
Летаріон

1
Роз'яснення на MongoDB. Ви не можете переключити повну базу даних на MongoDB. MongoDB - це щось зовсім інше, ніж СУБД, як MySQL, і, наприклад, не використовує SQL. Ви можете замінити лише деякі підключаються компоненти та використовувати їх для зберігання частини даних у MongoDB, наприклад, поля, журнали, блоки тощо.
Бердір

@Letharion >> Кластеруйте свою SQL-базу даних. Читає з однієї бази даних, пише в іншу. Pressflow може допомогти у цьому. Як цього можна досягти?
GoodSp33d

1
Чудова відповідь! Остаточний. Щоб додати до цього, подивіться на модуль розширеної CSS / JS агрегації, оскільки я розумію, що агрегація зменшує запити на окремі файли CSS та JS, тим самим сприяючи підвищенню продуктивності.
therobyouknow

23

Це ноти з мого досвіду і можуть відрізнятися від того, що відчувають інші. Я переважно використовую стек LAMP і вважаю те саме в своїх пропозиціях.

Великі правила кешування, яких я зазвичай дотримуюся.

  1. Обробити один раз кілька разів.
  2. Живіть із несвіжими даними, коли це можливо
  3. Очищати кеші рідко і тримати їх дуже специфічно.
  4. Коли це можливо, виконайте зміни на найнижчому рівні в стеці. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib та спеціальний модуль.

Поліпшення продуктивності веб-сайту Drupal (у порядку зростання складності)

  1. Постійно оновлюйте ядро, модуль допису та теми. Так це має значення.

  2. Встановіть APC на свій сервер. (Переміщено вгору на основі пропозиції Летаріона)

  3. Кешування сторінок: адміністратор / конфігурація / розробка / продуктивність Різниця між мінімальним терміном використання кешу та закінченням терміну кешованих сторінок

  4. Блокування керування https://drupal.org/project/blockcache_alter Параметри кешування для всіх блоків.
  5. Сукупність файлів javascript та css - поліпшення Front End https://www.drupal.org/project/advagg
  6. Вимкнути непотрібні модулі. Кожен модуль додає до кількості коду, який повинен бути доступний для завантаження сторінки. І це також збільшує кількість пошукових запитів. Можливо, використовувати загальний модуль замість декількох модулів, які виконують конкретні функції.
  7. Вміст Cache Views - кешування вмісту для Views https://www.drupal.org/project/views_content_cache
  8. Вимкнути журнал БД - використовуйте https://drupal.org/project/syslog_ng
  9. Зменшити 404 помилки - http://www.brokenlinkcheck.com/
  10. Швидкі відповіді 404 - https://drupal.org/project/fast_404 - Спробуйте працювати на рівні сервера.
  11. Валідації на стороні клієнта - https://www.drupal.org/project/clientside_validation
  12. Стиснути зображення - https://www.drupal.org/project/imageapi_optimize
  13. Ледаче завантаження зображень - не завантажуйте зайві зображення - https://www.drupal.org/project/lazyloader
  14. Використовуйте спрайт-листи - https://www.drupal.org/project/spritesheets

  15. Встановіть мінімальне значення часу кешу на більшу кількість та використовуйте модулі очищення кешу, щоб очистити кеші для певних сторінок - Щоразу, коли я редагую / оновлюю вузол, всі кеші сторінок для анонімного користувача втрачаються

  16. Використовуйте модуль Devel для перегляду запитів.
  17. Перезаписуйте запити про перегляди / уникайте переглядів, якщо це надлишок.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Профілювання та налаштування БД - https://www.drupal.org/project/dbtuner
  21. Використовуйте Boost , не завантажуйте БД завантаження, якщо це не потрібно. https://drupal.org/project/boost Для більшості малих та середніх сайтів Boost є досить хорошим, і вам можуть не знадобитися зворотні проксі або більше.
  22. Використовуйте CDN - https://www.drupal.org/project/cdn Його легко налаштувати.
  23. Якщо ваші таблиці кеш-пам'яті користуються величезною пам’яттю Memcached - Якщо ви можете встановити memcached і встановити оперативну пам’ять для неї, це не так складно, як це звучить.
  24. Etags - правильно налаштувати Etags. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Використовувати зворотний проксі-сервер - лак (принаймні для активів). Допомагає багато, якщо більшість ваших користувачів анонімні.
  26. Стиснута передача - увімкнення стиснення gzip
  27. Тримайте живу - використовуйте стійкі з'єднання, де це можливо.
  28. Прогресивні JPEGS -
  29. ПІДГОТОВКА В КОДІ - Блог Eaton є приголомшливим. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Реалізувати зігрівання кешу - https://www.drupal.org/project/cache_warmer - Кеш Прогрійте сторінки, перш ніж кінцевий користувач потрапить на них.
  31. Налаштування DB Master Slave - https://www.drupal.org/project/autoslave полегшує вам її налаштування.
  32. Кластери бази даних - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Балансири навантаження - http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. Використовуйте евристичне зігрівання кешу - https://www.drupal.org/project/cache_graceful
  35. Автентифіковане кешування користувачів - https://www.drupal.org/project/authcache

Відмінюючи відповідь, яку я написав для drupal.stackexchange.com/questions/118990/… . До речі, це було закрито, кажучи, що це занадто широкий. Я не впевнений, чи є велика різниця в цих двох питаннях :)
Gokul NK

18

Модуль підвищення також досить корисний, він створює статичні кешові файли з ваших веб-сторінок. Це в основному для веб-сайтів з великою кількістю анонімного трафіку користувачів.

Boost забезпечує статичне кешування сторінок для Drupal, що забезпечує дуже значне підвищення продуктивності та масштабованості для сайтів, які отримують переважно анонімний трафік. Для спільного хостингу це найкращий варіант з точки зору підвищення продуктивності. На виділених серверах ви можете замість цього розглянути Varnish.

Apache повністю підтримується, з Nginx, Lighttpd та IIS 7 напівпідтримуються. Boost буде кешувати & gzip стискати html, xml, ajax, css та javascript. Підвищує логіку закінчення часу кешу дуже досконала; досить просто мати різні терміни кешування для різних частин вашого сайту. Вбудований сканер забезпечує впевнений вміст швидко відновлюється для швидкого завантаження сторінки.


1
Boost чудово працює для Drupal 7, який зараз мав. У спільному хостинг-рішенні це чудовий шлях (оскільки вони, наприклад, часто не дозволяють Varnish).
Мудрець

5

Варто згадати, якщо ви використовуєте драйвер бази даних SQLIte, можливо, доведеться відключити синхронізацію диска.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

У деяких конфігураціях сервера це значно покращить продуктивність.


2
Оскільки це відключило його при кожному завантаженні сторінки, я думав, чи є кращий спосіб назавжди відключити його. Слід витратити трохи часу на перевірку.
Гокуль НК

1
Це можна зробити на сайтах / default / settings.php, додавши елемент "init_commands" до масиву баз даних $. Я знайшов приклад для "PRAGMA синхронно = ВИКЛ." Тут: bitacoles.enging.com/node/210
dinopmi

4

Секрет виконання Drupal полягає в кешуванні та дотриманні належних практик. Пропозиції:

Друпальський бек-енд

  • Увімкнути кешування в розділі Ефективність .
  • Перевірте працездатність та працездатність та масштабованість .
  • Перевірте параметри оптимізації продуктивності Drupal 7 та контрольний список .
  • Вимкнути невикористані та невиробничі модулі (наприклад, Devel, інтерфейс Views, інтерфейс правил тощо).
  • Вимкнення нестабільних модулів.
  • Відключити статистику .
  • Вимкніть основний модуль dblog та замініть його на syslog .
  • Вимкнути основний модуль менеджера оновлень .
  • Крон: Використовуйте вбудований крон Drupal, а не бідний маскрон (розгляньте Elysia або Ultimate cron).
  • Перегляди: Використовуйте кеш для переглядів на різних шарах (запит бази даних, розмітка, заснована на часі)
  • Блоки: Використовуйте кешування блоків, якщо ваш перегляд є блоком (на сторінку, користувача тощо).
  • Блоки: Розгляньте налаштування кеш-налаштувань на блок за допомогою модуля « Змінити кеш блоку» .
  • Панелі: Використовуйте кеш-пам'ять якомога більше (для D7 перевірити модулі PCC та PHC ).
  • Entity: Увімкнути кеш Entity .
  • При використанні декількох середовищ врахуйте відсутні модуль, який може покращити завантаження сторінки.
  • Увімкніть автентифіковане кешування сторінок користувачів за допомогою модуля Authcache .
  • Уникайте переспрямувань, які сповільнюють роботу користувачів.
  • Підвищить недійсність кешу за допомогою модуля Expire .
  • Використовуйте профілювання PHP перед виробництвом (наприклад, XDebug ).

Друпальський фронт-енд

  • Мінімізувати запити HTTP:
    • Увімкнути агрегацію JS / CSS у розділі Ефективність .
    • Використовуйте CSS-спрайти для зменшення кількості запитів на зображення.
    • Використовуйте невеликі зображення як вбудовані дані (URI на таблиці стилів).
    • Використовуйте карти зображень для об'єднання декількох зображень в одне зображення.
    • Також розглядайте можливість завантаження лінивих зображень (див. « Lazyloader Image» ).
    • Встановіть модуль BigPipe, щоб зменшити час завантаження.
    • Розглянемо ледачу завантаження проти ледачої оцінки.
    • Див.: Використання кеш-браузера - піддається дії!
  • Подумайте про те, щоб зробити JavaScript і CSS External (у деяких випадках це швидше).
  • Мінімізуйте JavaScript та CSS (див. Модуль Speedy ). Уникайте інлайн.
  • Посилаючись на JS, використовуйте deferабо asyncатрибути.
  • Мінімізуйте кількість кадрів.
  • Оптимізуйте зображення, шрифти, CSS-спрайти, зробіть невелику кількість кешованих файлів і зменшіть розмір файлу cookie.
  • Зменшіть кількість елементів DOM та посилань кешу на доступні елементи.
  • Зробіть швидше завантаження сторінок 404 за допомогою модуля Fast 404 .
  • Увімкніть агрегацію ресурсів і кешування за допомогою Advanced CSS / JS Aggregation .
  • Покладіть таблиці стилів вгорі та сценарії внизу.
  • Додайте Expires або заголовок Cache-Control , також ETags, щоб зменшити відповіді.
  • Використовуйте GET для AJAX і зробіть їх кешованими.
  • Попередньо завантажте та завантажте компоненти, щоб скористатися часом роботи браузера в режимі очікування.
  • Іноді розділення компонентів на домени може збільшити паралельне завантаження.
  • Не масштабуйте зображення в HTML і тримайте компоненти нижче 25 к.
  • Уникайте фільтрів, CSS-виразів, HTML-елементів із порожнім src чи href.
  • Використовуйте зворотний проксі для налагодження веб-запитів (наприклад, Charles ).
  • Використовуйте такі інструменти, як Y-Slow та PhantomJS для основних перевірок працездатності.
  • Використовуйте інструменти Google PageSpeed для аналізу та оптимізації вашого веб-сайту.
  • Читайте про специфікації навігації W3C ( GitHub ).

PHP

  • Увімкніть кешування PHP (наприклад, OpCache , APC ) та налаштування налаштувань.
  • Подумайте про використання PHP-FPM замість mod_php плюс Nginx замість Apache.

База даних

Сервер

Веб-сайти з високим трафіком

Якщо ви очікуєте високого завантаження вашого веб-сайту, використовуйте Varnish. Розглянемо також використання CDN.

Детальніше читайте на сайті: Досвід реального світу щодо масштабування та налаштування продуктивності


Подальші ресурси:


3

Існує книга під назвою " Високопродуктивний Drupal", яка пропонує кращі практики, приклади та поглиблені пояснення для вирішення декількох проблем із продуктивністю та масштабуванням. Ви дізнаєтесь, як застосовувати методи кодування та інфраструктури до внутрішніх систем Drupal, продуктивності програми, баз даних, веб-серверів та аналізу продуктивності.

У статті про продуктивність та масштабованість у Drupal 7 ви можете знайти приклади щодо Drupal 6 та Drupal 7 та наступний список:

Проекти продуктивності та масштабованості Drupal 7, які слід спостерігати:


2

Було багато налаштувань, щоб оптимізувати продуктивність вашого сайту Drupal, але не всі вкрай необхідні. Ми повинні оглянути певні альтернативи та методи, які б призвели до оптимізації платформи Drupal. Кеш, так, це спосіб оптимізувати веб-сайт за допомогою різних засобів, але деякі додатки та підказки можуть збільшити та налаштувати ваш веб-сайт без зайвих процесів.

Нещодавно ми опублікували подібну статтю на нашому веб-сайті, яка, на мою думку, може допомогти вам зробити певну роботу.

Джерело: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips


2

Є кілька можливостей покращити швидкість Drupal на розумному рівні, не встановлюючи жодних нових модулів. Так, Drupal має конфігурацію продуктивності.

  1. Ви можете налаштувати це, перейшовши за адресою: YourSiteDomain / admin / config / development / performance
  2. Увімкніть "Кеш-сторінки для анонімних користувачів" у розділі "Чашування"
  3. Мінімальний термін служби кешу: 1 день (якщо ви не регулярно оновлюєтесь)
  4. Термін дії кешованих сторінок: 1 день (якщо ви не регулярно оновлюєтесь)
  5. Увімкнути "Стиснути кешовані сторінки"
  6. Увімкнути "Агрегувати та стискати файли CSS"
  7. Увімкнути "Сукупність файлів JavaScript"

  8. Після встановлення цієї конфігурації перейдіть до: YourSiteDomain / admin / report / status

  9. Перевірте, чи є проблеми з дозволом для каталогів 'css' та 'js'
  10. Виправте дозвіл, визначений на сторінці звіту про стан

І тепер ви закінчили з оптимізацією швидкості для вашого drupal 7 сайту.

Інтернету інструментів тестування швидкості для перевірки швидкості є небагато. Обов’язково використовуйте один із інструментів перевірки швидкості та проведіть тест, перш ніж оновити вищевказані налаштування. Після оновлення налаштування продуктивності запустіть тест швидкості ще раз. Ви обов'язково побачите покращення.

Pingdom та HTTP Fox (плагін FireFox) - найкращі інструменти для перевірки швидкості сайту.

Наведені вище параметри не лише кешують ваші сторінки для анонімних користувачів, але також стискають файли CSS та JS. Наприклад, якщо ваш сайт завантажує 80 файлів, опублікуйте ці налаштування, кількість запитів зменшиться щонайменше на 50%. Отже, тут у вас є 2-кратне покращення швидкості на вашому сайті Drupal.


2

Як розробник бекенда, завжди можна вдосконалити свій код, щоб підвищити ефективність веб-сайту. Деякі вказівки для розробників бекенду можуть бути:

1) Очистіть стіл сторожової собаки

2) Не зловживайте API змінної

3) Зробіть менше або кращі HTTP запити

4) Тримайте свій "точковий модуль" коротким

Що стосується шрифту та розробників сайтів, можна досягти набагато більше, але важливо враховувати ефективність з кожної точки зору.

Джерело: Оптимізуйте, перш ніж жити


2

Неоптимізований сайт Drupal 7 з 2 ГБ оперативної пам’яті може задовільно обслуговувати близько 20-25 запитів в секунду. Якщо ви хочете вийти за рамки цього, сайт потребує певного налаштування. Те, що ви налаштуєте, залежить від того, чи більшість користувачів на сайті є анонімними або автентифікованими. Ось основні речі, які ви можете зробити для покращення продуктивності:

Сайт обслуговує переважно анонімних користувачів:

1) Визначально встановіть та налаштуйте APC, memcache та entcache.

2) Помістіть проксі-сервер Varnish перед веб-сервером. Установка та налаштування потребує приблизно 30 хвилин, але значно скоротить час завантаження сторінки. Фактично, Varnish може обробляти близько 300 запитів в секунду на машині 2 Гб, якщо всі сторінки кешовані. Використовуйте модуль Expire для закінчення терміну дії лише вибраних сторінок при оновленні / видаленні вмісту.

3) Використовуйте розширений модуль агрегації CSS / JS для агрегації файлів CSS та JS. Спробуйте перемістити всі файли JS внизу сторінки. Але зауважте, що це може порушити ваш сайт, тому застосуйте це на виробництві після ретельного тестування. Також експериментуйте з вбудованим критичним CSS. На мій досвід, це скоротить час завантаження сторінки приблизно на півсекунди.

4) CSS / JS / зображення повинні мати далеко не майбутній термін дії. Це забезпечить, що браузери не будуть запитувати однакові CSS / JS / зображення знову і знову.

5) Переконайтеся, що веб-сервер обслуговує стислі сторінки / CSS / JS.

Після виконання вищезазначених 5 кроків ваш 2 Гб оперативної пам’яті повинен бути в змозі досить легко серверувати 50 запитів на секунду.

Сайт обслуговує переважно аутентифікованих користувачів:

Оптимізація такого сайту є складнішою. Такі сайти для оптимізації належать до однієї з двох підкатегорій:

(a) Більшість сторінок на сайті ідентичні, за винятком 1 або 2-х блоків, які містять інформацію, орієнтовану на користувача. Наприклад, наприклад, Drupal Commerce.

(b) Більшість сторінок повністю налаштовані для користувача. Наприклад, наприклад, Drupal Commons.

Якщо ваш сайт підпадає під категорію (а), то застосуйте більшість методів, які ми обговорювали для сайту, який обслуговує переважно анонімних користувачів. Єдина відмінність полягає в тому, що для сторінок, які не є адміністраторами, Varnish повинен буде видалити файл cookie SESSION із заголовка та подати кешовані сторінки. Використовуйте модуль AJAX Block для серверних блоків із специфічною для користувача інформацією за допомогою AJAX. Таким чином велика частина сторінки буде надрукована надзвичайно швидко за допомогою Varnish, а потім інформація, що стосується користувача, буде надана через AJAX.

Якщо ваш сайт підпадає під категорію (b), використовуйте модуль Authcache. Я вважаю за краще не використовувати його якомога більше, оскільки це вимагає зовсім небагато конфігурації та обслуговування. Але це працює дуже добре. Це буде не так швидко, як використання Varnish, але він зможе обробляти 50 запитів в секунду, які ви шукаєте.

Якщо ви хочете вийти за межі того, що ми обговорювали тут, ознайомтесь із контрольним списком оптимізації продуктивності Drupal . Розкриття: Це написано мною. Він наводить вичерпний перелік речей, які ви можете зробити, щоб ваш сайт Drupal швидко палав.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.