• ПлагиныBackend
  • Quicksilver – система кэширования страниц в статичные файлы.

superoleg

location = / {
    try_files /page-cache/pc__index__pc.html /index.php?$query_string;
}

location / {
    try_files $uri $uri/ /page-cache/$uri.html /index.php?$query_string;
}
  • superoleg ответили на это сообщение.
    4 месяца спустя

    reazzon

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

    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 ответили на это сообщение.

      superoleg Для Nginx юзай следующий конфиг

      location = / {
          try_files /page-cache/pc__index__pc.html /index.php?$query_string;
      }
      
      location / {
          try_files $uri $uri/ /page-cache/$uri.html /page-cache/$uri.json /index.php?$query_string;
      }
      • superoleg ответили на это сообщение.

        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; }
        • reazzon ответили на это сообщение.

          superoleg Так и знал, что где-то опечатка у тебя

          Конфиг взял из документации к оригинальному пакету ларавеля, поэтому не мое)))

          Проблема такая - плагин генерит html для конкретной страницы при первом посещении. Так вот, у меня есть магазин и товары этого магазина можно добавить в виш лист и корзину. Я зашел на страницу товара, закешал его. Потом добавил его в корзину или в вит лист. И тут начинаются приколы, товар в виш листе или корзине, но возле значка (в хедере) это не отображается + как как я понимаю необходимо прописывает правила для чекаутов, корзины и тд, чтобы они были динамическими.

            JohnnyMaynne корзину в хедере лучше подгружать ajax'ом, а отдельные странички уже с шагами оформления заказа добавить в исключение)

            Получается все динамические элементы подгружать ajax при загрузке страницы ?

            • reazzon ответили на это сообщение.

              JohnnyMaynne Смотря какие.

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

              Если например комментарий на странице поста, то надо просто сбрасывать так-же кеш этой страницы. Команда для этого есть php artisan page-cache:clear /path/to/page

              • JohnnyMaynne ответили на это сообщение.
                • Изменено

                JohnnyMaynne Такие элементы как счетчик товаров в корзине, да, нужно подгружать через AJAX, вот пример магазина на Shopaholic, где используется Quicksilver: https://elektro-tovars.ru/

                • JohnnyMaynne ответили на это сообщение.

                  reazzon это делать только с помощью команды или можно как то на бэкэнде это сделать?

                  • reazzon ответили на это сообщение.

                    reazzon работает просто молниеносно. Я как начал его тестить немного офигел от скорости загрузки страниц, очень ощутимый прирост.

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

                    • reazzon ответили на это сообщение.

                      JohnnyMaynne делаешь просто php artisan page-cache:clear и чистится весь кеш. У нашего сайта электротоваров это не вызывает никаких проблем.

                      JohnnyMaynne это делать только с помощью команды или можно как то на бэкэнде это сделать?

                      В панели управления можно добавить виджет с кнопками по очистке кеша.

                      • JohnnyMaynne ответили на это сообщение.

                        reazzon я видел виджет) Если сбрасывать весь кеш, получается что и все страницы удаляться с кеша и будут генеряться заново?

                        • JohnnyMaynne ответили на это сообщение.

                          JohnnyMaynne а за бэк я спросил, потому что хотел использовать ,например,. к beforeSave  и чистить кеш при сохранении товара

                          • reazzon ответили на это сообщение.

                            JohnnyMaynne beforeSave  и чистить кеш при сохранении товара

                            Так тоже можно. Вызывай через Artisan::call('page-cache:clear', .. // и так далее

                            • JohnnyMaynne ответили на это сообщение.
                              месяц спустя
                              • Изменено

                              Конфигурация Nginx для OctoberCMS с поддержкой QuickSilver плагина.
                              https://gist.github.com/LeMaX10/3b0e4996e6c13f8c906d7680a6838779

                              1. Прописаны все необходимые настройки;
                              2. Ограничения на доступ к файлам .htaccess,.htpasswd,.env;
                              3. Условие для Ajax запросов и POST, PATCH, PUT, DELETE прямое перенаправление на index.php;

                              Лучше если будет активно еще кеширование Nginx, тогда эффективность отдачи закешированных страниц будет выше, так как отдавать начнет Nginx на прямую из своего кеша.

                              • reazzon ответили на это сообщение.