PageSpeed Yii2 Оптимизация
Как добиться высокой производительности загрузки сайта на Yii2: включить кэширование файлов и запросов из базы данных, минифицировать css, js, html, добавить настройки кэширования в htaccess…
Сама по себе yii2 довольно быстрая платформа для создания сайта. Но в некоторых случаях требуется чтобы сайт работал быстрее нужно применить еще несколько условных ускорялок.
1. Добавляем в .htaccess следующие строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # сжатие text, html, javascript, css, xml: <ifModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript </ifModule> # кеш браузера <ifModule mod_expires.c> ExpiresActive On #по умолчанию кеш в 5 секунд ExpiresDefault "access plus 1 days" # Включаем кэширование изображений и флэш на месяц ExpiresByType image/x-icon "access plus 1 month" ExpiresByType image/jpeg "access plus 4 weeks" ExpiresByType image/png "access plus 30 days" ExpiresByType image/gif "access plus 43829 minutes" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" # Включаем кэширование css, javascript и текстовых файлов на одну неделю ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 604800 seconds" ExpiresByType application/javascript "access plus 604800 seconds" ExpiresByType application/x-javascript "access plus 604800 seconds" # Включаем кэширование html и htm файлов на один день ExpiresByType text/html "access plus 43200 seconds" # Включаем кэширование xml файлов на десять минут ExpiresByType application/xhtml+xml "access plus 600 seconds" # Нестандартные шрифты сайта ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" </ifModule> |
2. Включаем кэширование в самой yii2 (файловый кэш) FileCache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <? $config = [ ... 'components' => [ ... 'cache' => [ 'class' => 'yii\caching\FileCache', 'cachePath' => BASE_PATH . '/runtime/cache', ], ... ], ... ]; if (YII_DEBUG) { // configuration adjustments for 'dev' environment $config['components']['db']['enableSchemaCache'] = false; } return $config; |
или Redis Cache
1 | composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <? $config = [ ... 'components' => [ 'cache' => [ 'class' => 'yii\redis\Cache', 'redis' => [ 'hostname' => '127.0.0.1', 'port' => 6379, 'database' => 0, ] ], ], ... ]; if (YII_DEBUG) { // configuration adjustments for 'dev' environment $config['components']['db']['enableSchemaCache'] = false; } return $config; |
3. Уменьшаем и минифицируем css, js, html
Устанавливаем yii2-minify-view
1 | composer require rmrevin/yii2-minify-view |
и подключаем в web.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? $config = [ ... 'components' => [ ... 'view' => [ 'class' => '\rmrevin\yii\minify\View', //'enableMinify' => !YII_DEBUG, 'web_path' => '@web', 'base_path' => '@webroot', 'minify_path' => '@webroot/minify_files', 'js_position' => [\yii\web\View::POS_END], 'force_charset' => 'UTF-8', 'expand_imports' => true, 'compress_output' => true, 'minifyCss' => true, 'concatCss' => true, 'compress_options' => ['extra' => true], ], ... ], ... ]; return $config; |
Можно также попробовать установить другой компонент
1 | composer require --prefer-dist skeeks/yii2-assets-auto-compress "*" |
!!! Но с ним на локалхосте почему то не работает сайт.
4. Также для ускорения загрузки страниц, нужно уменьшить количество запросов в базу данных. А именно если у Вас urlManager свой и создает url на лету записывая значения в базу данных, то для них также можно сделать кэширование.
Тест pagespeed для компьютеров.
Тест pagespeed для мобильных устройств.
Информация о том как добиться такой производительности скоро обновиться!
Спасибо за статью, очень помогла было 63/75 стало 92/96
Вот только не понял что вы имели ввиду что можно кэшировать урлы из базы? зачем ?
Записывать ссылку как в базу так и сохранять ее в кэше. Если ссылка существует в кэше тогда не производить запрос в базу, а сразу ее брать из кэша.
$cache = Yii::$app->cache->get($pathInfo);
if ($cache == false) {
// если в кэше нет ссылки
//получаем из БД ссылку по строке содержащей заданный алиас
$sef = Sef::find()->where([‘link_sef’ => $pathInfo])->one();
// и если она есть в базе записываем в кэш
if ($sef) {
$cache_set = Yii::$app->cache->set($pathInfo, $sef, 86400);
}
} else {
//если ссылка есть в кэше
$sef = $cache;
}
Отлично, правда не очень почему то помогло было 83/91 стало 92/95
Вот хороший пример для кэша через htaccess
https://gist.github.com/solancer/a51cf728a119a16f4c6ce494864a2d47
ух какие цифирочки, мне б такие
Что то у вас при проверки не такие показатели
Отлично!