Оптимизация Yii2

Для каждого проекта очень важна скорость работы проекта, а от этого зависит именно оптимизация нашего фреймврока. В этой статье я вам расскажу, как лучше всего оптимизировать Yii2, чтобы сайт работал быстрее.

Оптимизация

Для начала займемся оптимизацией.

1. Включение кэширования схем базы данных.

Если вы зайдете в /debug и посмотрите любой запрос, где используется база данных, то увидите, как постоянно происходит получение схем базы данных, а это лишние SQL запросы каждый раз, поэтому хорошо было бы кэшировать эти данные. Я привык это делать в файлы, поэтому и вам советую так делать. Открываем файл настроек db.php и добавляем туда

'enableSchemaCache' => true,
'schemaCacheDuration' => 3600,
'schemaCache' => 'fileCache',

Если вы не настроили кэширование, то сделайте это. Все схемы будут обновляться раз в час. Учтите, что если вы измените структуру любой таблицы в базе (например, добавите какое-нибудь дополнительное поле), то у вас будет вылезать ошибка. Чтобы не ждать обновления, просто зайдите в runtime/cache и удалите оттуда всё.

2. Отключение debug

Разумеется, постоянная работата debug не требуется, а это замедляет работу сайта, ведь приходится всё логировать, что не есть хорошо. Поэтому открываем файл index.php и удаляем оттуда строку

defined('YII_DEBUG') or define('YII_DEBUG', false);

После чего все отлично будет работать.

3. Не используйте Active Record там, где это не требуется

Да, Active Record очень удобная штука, но это довольно сильно снижает производительность вашего приложения. Если вам надо просто получить данные, без последующего их изменения, то просто добавьте

->asArray()

. Пример:

$data = Data::find()->asArray()->all();

4. Оптимизируйте Composer

Пакетный менеджер PHP используется для подключения огромного количество файлов, поэтому давайте оптимизируем его. Сделать это легче всего. Просто выполните команду:

php composer.phar dumpautoload -o

5. Кэшируйте полученные данные

Помните, что извлечь информацию из кэша гораздо быстрее, чем постоянно делать SQL запрос.
Пример кэширования:

if ($this->beginCache($id, ['duration' => 3600])) {

    // ... здесь создаём содержимое ...

    $this->endCache();
}

6. Gzip сжатие

Gzip — мощная утилита для сжатия данных, поэтому обязательно нужно использовать gzip сжатие в проектах.
Для включения вам необходимо добавить пару строк в nginx настройки вашего сайта:

gzip on;
gzip_disable "msie6";
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

И добавьте в .htaccess несколько строчек (не забудьте включить mod_defalate):

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

7. Клиентское кэширование

Используйте кэширование на стороне браузера. Для этого вставьте следующей фрагмент кода в .htaccess:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/pdf "access plus 1 month"
  ExpiresByType text/x-javascript "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresDefault "access plus 2 days"
</IfModule>

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *