Quicksilver – система кэширования страниц в статичные файлы.
- Изменено
в тот раз так и не получилось) Сейчас удалось достать из кэша только главную страницу
Покажите, пожалуйста, на примере моей конфигурации, как нужно доставать из кэша другие страницы
location = / {
try_files $uri /storage/page-cache/pc__index__pc.html /index.php?$query_string;
}
location / {
# Let OctoberCMS handle everything by default.
# The path not resolved by OctoberCMS router will return OctoberCMS's 404 page.
# Everything that does not match with the whitelist below will fall into this.
rewrite ^/.*$ /index.php last;
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
}
# Pass the PHP scripts to FastCGI server
location ~ ^/index.php {
# Write your FPM configuration here
}
# Whitelist
## Let October handle if static file not exists
location ~ ^/favicon\.ico { try_files $uri /index.php; }
location ~ ^/sitemap\.xml { try_files $uri /index.php; }
location ~ ^/robots\.txt { try_files $uri /index.php; }
location ~ ^/humans\.txt { try_files $uri /index.php; }
## Let nginx return 404 if static file not exists
location ~ ^/storage/app/uploads/public { try_files $uri 404; }
location ~ ^/storage/app/media { try_files $uri 404; }
location ~ ^/storage/temp/public { try_files $uri 404; }
location ~ ^/modules/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/themes/.*/assets { try_files $uri 404; }
location ~ ^/themes/.*/resources { try_files $uri 404; }
- Изменено
reazzon а можно полный location / {} ?
ибо все равно не получается из кэша брать и одновременно, если нет в кэше, чтобы запускало index.php
Так и знал, что где-то опечатка у тебя) Пришлось поизучать nginx, повысить свой уровень от нуля до стремится к нулю =)
location = / {
try_files $uri /storage/page-cache/pc__index__pc.html /index.php?$query_string;
}
location / {
# Let OctoberCMS handle everything by default.
# The path not resolved by OctoberCMS router will return OctoberCMS's 404 page.
# Everything that does not match with the whitelist below will fall into this.
try_files /storage/page-cache$uri.html /index.php?$query_string;
}
# Pass the PHP scripts to FastCGI server
location ~ ^/index.php {
# Write your FPM configuration here
rewrite ^/.*$ /index.php last;
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
}
# Whitelist
## Let October handle if static file not exists
location ~ ^/favicon\.ico { try_files $uri /index.php; }
location ~ ^/sitemap\.xml { try_files $uri /index.php; }
location ~ ^/robots\.txt { try_files $uri /index.php; }
location ~ ^/humans\.txt { try_files $uri /index.php; }
## Let nginx return 404 if static file not exists
location ~ ^/storage/app/uploads/public { try_files $uri 404; }
location ~ ^/storage/app/media { try_files $uri 404; }
location ~ ^/storage/temp/public { try_files $uri 404; }
location ~ ^/modules/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/themes/.*/assets { try_files $uri 404; }
location ~ ^/themes/.*/resources { try_files $uri 404; }
- Изменено
Проблема такая - плагин генерит html для конкретной страницы при первом посещении. Так вот, у меня есть магазин и товары этого магазина можно добавить в виш лист и корзину. Я зашел на страницу товара, закешал его. Потом добавил его в корзину или в вит лист. И тут начинаются приколы, товар в виш листе или корзине, но возле значка (в хедере) это не отображается + как как я понимаю необходимо прописывает правила для чекаутов, корзины и тд, чтобы они были динамическими.
JohnnyMaynne корзину в хедере лучше подгружать ajax'ом, а отдельные странички уже с шагами оформления заказа добавить в исключение)
Получается все динамические элементы подгружать ajax при загрузке страницы ?
JohnnyMaynne Смотря какие.
Если например ты имеешь ввиду например листинг новостей, то достаточно сбрасывать кеш этой страницы каждый раз когда добавляется новая новость.
Если например комментарий на странице поста, то надо просто сбрасывать так-же кеш этой страницы. Команда для этого есть php artisan page-cache:clear /path/to/page
- Изменено
JohnnyMaynne Такие элементы как счетчик товаров в корзине, да, нужно подгружать через AJAX, вот пример магазина на Shopaholic, где используется Quicksilver: https://elektro-tovars.ru/
reazzon это делать только с помощью команды или можно как то на бэкэнде это сделать?
reazzon работает просто молниеносно. Я как начал его тестить немного офигел от скорости загрузки страниц, очень ощутимый прирост.
- Изменено
reazzon только что подумал,что я ж закалебусь чистить кеш везде при добавлении нового товара. Новые товары выводятся на главной, потом основная категория, подкатегории и тд
JohnnyMaynne делаешь просто php artisan page-cache:clear
и чистится весь кеш. У нашего сайта электротоваров это не вызывает никаких проблем.
JohnnyMaynne это делать только с помощью команды или можно как то на бэкэнде это сделать?
В панели управления можно добавить виджет с кнопками по очистке кеша.
- Изменено
reazzon я видел виджет) Если сбрасывать весь кеш, получается что и все страницы удаляться с кеша и будут генеряться заново?
JohnnyMaynne а за бэк я спросил, потому что хотел использовать ,например,. к beforeSave и чистить кеш при сохранении товара
JohnnyMaynne beforeSave и чистить кеш при сохранении товара
Так тоже можно. Вызывай через Artisan::call('page-cache:clear', .. //
и так далее
reazzon Благодарю
- Изменено
Конфигурация Nginx для OctoberCMS с поддержкой QuickSilver плагина.
https://gist.github.com/LeMaX10/3b0e4996e6c13f8c906d7680a6838779
- Прописаны все необходимые настройки;
- Ограничения на доступ к файлам .htaccess,.htpasswd,.env;
- Условие для Ajax запросов и POST, PATCH, PUT, DELETE прямое перенаправление на index.php;
Лучше если будет активно еще кеширование Nginx, тогда эффективность отдачи закешированных страниц будет выше, так как отдавать начнет Nginx на прямую из своего кеша.