Що все сприяє виконанню друпальних сторінок?


17

У мене є сайт, на якому я досліджую, який має основні проблеми з продуктивністю, за допомогою memcache я зміг знизити кількість запитів як за кількістю, так і за загальний час виконання (від 3 секунд до 230 мс), але час виконання сторінки ухиляється від мене (я дивлячись на значення, що виводяться devel) я розумію, що час виконання сторінки = час, необхідний для виконання php, тому я встановив APC, і я можу побачити кешування php-коду та статистику, що показує хіти на панелі керування APC (apc.php, що постачається разом із APC), але час моєї сторінки не скорочується. Тож я думаю, що моє питання двояке:

  • Що все сприяє (краще сповільнює) час виконання сторінки? Чи потрібен лише час для виконання php?
  • Які підходи слід застосувати, щоб зменшити час виконання сторінки. Я спробував APC, але не дуже допомогло

Кількість модулів PS, що використовуються на цьому сайті, просто величезна (168), але зараз я не в змозі дати цю рекомендацію, вона більше нагадує пожежу в ситуації з діркою.

Редагувати: Вихід із запуску xhprof на локальному екземплярі (рекомендується mikeytown), це здається божевільним. Я думаю, що пізніші результати зумовлені обмолотом? Різні прогони для однієї і тієї ж URL-адреси мають різку різницю та її надто велике використання ресурсів. Також не впевнений, чому він показує значення, які не є сьогодні: | (Я щойно встановив xhprof на цьому ноутбуці)

Виведення запущеного xhprof в локальному екземплярі

Відповіді:


4

Отримайте кешгринд свого сайту. xdebug або xhprof можуть генерувати один. Це покаже вам, які функції тривають найдовше. Поки ти цього не зробиш, гра в погані здогади.


Ей, дякую за пропозицію, я щойно запустив xhprof у своїй версії локальної розробки (ноутбук не на сервері), і я бачу це - picasaweb.google.com/lh/photo/… Це справді? Я маю на увазі, чи можливо сторінка споживає 750 Мб пам'яті?
Діпен

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

1
Це дійсно залежить, але для 99,9% налаштувань, якщо ви використовуєте понад 100 Мб оперативної пам'яті, щось не так.
mikeytown2

Окрім кількості модулів, може бути щось інше не так? Я не впевнений, чи можна відразу вилучити модулі з виробництва. Btw, на локальних я використовую nginx + php-fpm, а на виробництві сайт використовує lightghed з швидкими cgi.
Діпен

1
Потрібно розгорнутись у кешгриді і перерахувати, яку функцію ви їсте весь час. img715.imageshack.us/i/cgrindout.png
mikeytown2

1

EDIT: Я неправильно прочитав оригінальний пост. 168 модулів - це багато, а від 300 до 700 мс SQL запитів величезна кількість . Чим більше модулів ви будете використовувати, тим більше запитів вони будуть, як тільки модулі виконають.

Використовуйте агресивне кешування, поки можете, кешуйте все, якщо цього недостатньо, спробуйте зворотний кеш-проксі. Використання CDN для файлів може значно покращити все. Зворотний кеш-проксі також може допомогти вам, видаливши деякі автентичні файли cookie, коли потрапляє на сторінки, які не потребують його (тоді ядро ​​подумає, що користувач анонімний для них і максимально збільшить кешування).


Динамізм ядра Drupal змушує весь світанок повільно, як тільки у вас одночасно взаємодіє занадто багато модулів.

Я б сказав, наприклад, якщо ви використовуєте багато модулів, які завантажують дані в час kuk_node_load () замість полів, це зробить багато запитів, тоді як використання поля забезпечить ефективність кешування.

Візуалізація також може зайняти багато часу, drupal_render () (API рендеринга колись називається) - це приємний фрагмент API (дійсно корисний), але також трохи повільний. Перехід на PDO (D7) та повний DBTNG (що, до речі, чудово), також додає затримку, що не викликає негативності.

Однак, ядро ​​само по собі є досить швидким (але воно робить занадто багато SQL запитів, навіть майже нічого не встановлене), слабко закодовані модулі часто є вузьким місцем.

APC може розділити час виконання на 2 або 3, залежно від коду, який працює. якщо ви добре налаштуєте його (увімкніть усі оптимізації APC, офіційний посібник APC добре написаний і буде керувати вами).

Якщо ви знаходитесь в коробці з повільною файловою системою (мережева файлова система або повільний жорсткий диск), це може спричинити видимий вплив на час виконання. Drupal створений з безлічі невеликих файлів, що змушує PHP робити введення-виведення на FS кожного разу, коли він завантажує один з них (APC також дуже допомагає для цього).

Неправильно налаштована СУБД також може бути досить потворним вузьким місцем, якщо ви використовуєте MySQL, подумайте про точну настройку. Якщо ви перебуваєте на спільному хостингу, якщо це не специфічний для Drupal (або готовий) стек СУБД і PHP, можливо, буде неправильно налаштований або не налаштований, що може призвести до дійсно повільних сайтів.

Не забудьте активувати всі кеші. Якщо ваш сайт не має автентифікації, орієнтований на користувача, активуйте кешування агресивної сторінки (це дійсно дивовижно).

Чим більше у вас буде блоків, тим повніші сторінки будуть повільними, блоки модулів перегляду будуть вузьким світом (залежно від використовуваних плагінів Views, блок OG може бути справжнім болем), якщо ви не обмежите їх видимість на основі сторінки або з користувацьким кодом PHP (будь-який інший блок також, завжди встановлюйте видимість свого блоку вручну, значно допомагає фреймворку, уникаючи спроби візуалізувати порожні блоки).

Уникайте модулів, у яких використовується запуск_ініт (), гак_ініт () запускається на кожній сторінці, навіть якщо ви отримаєте 403 або 404, що сповільнює все (це навіть сповільнює час створення файлів imagecache | | стилю, і 404 помилок у файлах буде світанок повільний, щоб повідомити, що файл не існує).


Привіт, тут я кажу, що час виконання сторінки я маю на увазі значення, яке відображається модулем devel в нижній частині сторінки і не використовує його в загальному розумінні циклу запитів / відповідей друпалів, який також включає SQL-запити тощо. Моє питання: в контексті автентифікованого користувача. Отже, коли час створення сторінки звітів про звіти розробників включає чи запити sql?
Діпен

Я не впевнений, чи буде файлова система вузьким місцем, оскільки я перебуваю на 15k файловій системі Linux RPM. Запити SQL займають приблизно 300-700 мс залежно від сторінки, але час виконання сторінки ~ = 3 сек (повідомляється devel). Не впевнений, що ще може бути проблемою.
Діпен

Пробачте, я неправильно прочитав вашу оригінальну публікацію. Значення Devel обчислюється від завантаження до відключення (у модуля Devel є власний обробник відключення PHP для виконання багатьох речей, включаючи це). Я не впевнений, коли саме він починається та зупиняється, але майже весь час створення сторінки Drupal та особливості бізнесу включені у час виконання цієї сторінки. Так, воно включає в себе все (включаючи час та затримку SQL запитів) та власну затримку (журнал запитів devel також впливає на продуктивність).
П’єр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.