9 кроків з оптимізації YII

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

Для аналізу пропускної здатності скористаємося інструментом Apache Benchmark:

# 30 запитів на секунду видає сервер на стандартній установці Yii

Скромний сервер 512 Мб оперативної пам'яті з одним ядром здатний буде витримати 30 запитів в секунду. Цей показник можна значно покращити.

Клієнтська оптимізація

Оптимізація програми на стороні браузера може збільшити швидкість роботи в кілька разів. Починати слід саме з цього.

1. Стиснення Gzip

оптимізації

Переконайтеся, що у програмі включена компресія текстових даних. Це дозволить зменшити розміру сторінок, що віддаються, у кілька разів. У Nginx'e компресія включається так:

Повну конфігурацію Nginx для програм Yii можна подивитися тут.

2. Клієнтське кешування

сторінок

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

Nginx'e включається так:

# Включаємо клієнтське кешування для файлів статики

Оскільки файли CSS/JS можуть змінюватися, скористаємося методикою версіонування статики керувати клієнтським кешем. Для CSS:

# CSS версії для керування кешем у браузері

Для версіонування Javascript потрібно використовувати метод scriptMap():

Javascript версії для керування кешем у браузері

3. Мініфікація тасклеювання статики

запитів

Декілька CSS файлів – це кілька HTTP запитів. Набагато краще мати один CSS-файл, щоб клієнту не доводилося робити багато запитів. Те саме стосується і Javascript'a. Для використання цього в Yii необхідно використовувати сторонній компонент мініфікації (наприклад, компресор YUI) і переписати завантаження JS/CSS файлів в HTML.

Мініфікація

Спочатку всі Javascript файли необхідно "склеїти" в один файл all.js. Після цього виконати мініфікацію за допомогою YUI compressor:

Те саме робимо для CSS - в all.css:

Тепер необхідно завантажити потрібні файли в HTML:

# Завантаження мініфікованих JS/CSS файлів

Слід враховувати, що таку процедуру мініфікації необхідно робити після кожної зміни Javascript або CSS. Проте немає необхідності використовувати це в середовищі розробки. Тому цей процес підготовки статики буде зручно вбудувати в deploy-скрипт.

Серверна оптимізація

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

4. Оптимізація PHP

оптимізації

Основним і обов'язковим кроком оптимізації PHP, на якому написаний Yii, є установка системи кешування байт-коду. Використовуйте OpCache або APC для версії PHP більше або менше 5.5 відповідно. Кешування байткоду дозволяє заощадити на читанні та компіляції файлів. Це розвантажить процесор та прискорить роботу програми.

5. Вимкнення режиму налагодження

оптимізації

Не забудьте вимкнути режим налагодження. Константа YII_DEBUG має бутивстановлена ​​в false:

6. Спрощений завантажувач

сторінок

Щоб увімкнути завантажувач yiilite.php, відредагуйте index.php:

7. MySQL Запити

оптимізації

ActiveRecord може будувати дуже складні запити чи його серії. Аналізуйте такі ситуації за допомогою профілювання. У виявлених випадках використовуйте компонент DAO для побудови прямих SQL-запитів:

# Запит на MySQL з індексами може працювати набагато швидше, ніж серія запитів на PHP

8. Кешування запитів

кроків

Кешування важких запитів є невід'ємною частиною оптимізації будь-яких програм. Yii підтримує кешування на основі Memcache. Для його включення необхідно вказати налаштування кешу у файлі protected/config/main.php:

Тепер ми можемо використовувати метод cache() для кешування будь-якого запиту:

# Кешуємо запит до моделі Post на 60 секунд

9. Кешування сторінок

Кешування сторінок - один із найпотужніших методів прискорення сайтів. Така методика добре підходить для сайтів, які нечасто змінюються (наприклад, блоги/новини/магазини). Для кешування сторінок у Yii необхідно в контролері змінити обробник filters():

# Закешує сторінки цього контролера на 60 секунд

Крім цього, Yii дозволяє вказати параметр, за унікальним значенням якого зберігатимуться дані. Наприклад, ми хочемо зберігати кеш окремо для кожного запису у блозі. Тоді необхідно використовувати GET параметр ># Закешує сторінки окремо для кожного значення GET параметру ID

Проведемо повторний тест програми:

# Бачимо зменшення часу генерації сторінки в 10 разів

Швидкість роботи і кількість запитів, що обробляються в секунду, відрізняються на порядок на краще. Основний приріст упродуктивності принесло кешування сторінок.

Крім цього, клієнтський показник оптимізації зріс до 93/100. Хороший рівень для більшості сайтів.

Найважливіше

Оптимізація програми на платформі Yii може збільшити його швидкість у кілька разів. Використовуйте оптимізацію клієнта для збільшення швидкості роботи для відвідувачів. Серверна оптимізація дозволить витримати більше відвідувачів, не купуючи дорожчі сервери.

Клієнтська оптимізація Web сайту

Швидка генерація даних для MySQL таблиць

Тестування онлайнових запитів за допомогою hurl.it

Оптимізація JPEG картинок

Онлайн оптимізація PNG

Мініфікація (minify) HTML

Аналіз навантаження на процесор

Інструмент для гарячих бекапів MySQL

5 методик використання lazy loading для оптимізації

Методи оптимізації сайтів на стороні браузерів

Вибір формату зображень та типу стиснення

Аналіз повільних PHP скриптів за допомогою XHprof

Відстеження швидкості завантаження сторінок у Google Analytics

Перевірка роботи Mysql під навантаженням Sysbench

Кешування динамічних сторінок за допомогою SSI

Що означає високе навантаження (highload) і що при цьому робити?