Для каждого проекта очень важна скорость работы проекта, а от этого зависит именно оптимизация нашего фреймврока. В этой статье я вам расскажу, как лучше всего оптимизировать 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>
Помните, что клиентская оптимизация вашего сайта ускорит его загрузку в браузере, а серверная позволит улучшить производительность сервера.