Выдаем вместо кэша html файлик

Предыстория. Возник такой вопрос. Есть какой то сайт, и в нем получается в каталоге было так. В вызов mFilter2 вложено в чанк еще парочка вызовов msProducts ну и так далее. В итоге, раздел грузился за овер 10 секунд. Да, сейчас напишите, что вот надо оптимизировать. Это понятно, но я решил подойти с другой стороны.
Итак, идея была такая, что бы вместо кэша выдавать уже готовую разметку целой страницы.
В итоге, у нас есть плагин:
<?php
switch($modx->event->name){
    case 'OnWebPagePrerender':
        // Тут просто условие, чтобы срабатывал только на категории (можно по сути задавать разные условия)
        if($modx->resource->class_key != 'msCategory'){
            return;
        }
        //Забираю отрендеренный ресурс
        $_output = &$modx->resource->_output; //Забираю отрендеренный ресурс
        // Создаю файлик разметки этого ресурса (можно по сути указать любой путь и так далее, сейчас и так сойдет)
        $file = MODX_BASE_PATH . 'resourcecache/' . $modx->resource->uri . '/' . $modx->resource->id . '.txt';
        if(is_file($file)){
            // Если такой файлик уже существует, то просто отдаю его содержимое
            $output = file_get_contents($file);
        }else{
            // Если файлика нету, то записываю туда отрендеренную страницу
            $cache = $modx->getCacheManager();
            $cache->writeFile($file, $_output);
            $output = $_output;
        }
        
        // Подменяю вывод на готовый
        $modx->resource->_output = $output;
        
        break;
        
    case 'OnLoadWebPageCache':
        // Это событие срабатывает до рендера страницы, оно проверяет, есть ли кэш страницы, и если он есть...
        $file = MODX_BASE_PATH . 'resourcecache/' . $modx->event->params['resource']->uri . '/' . $modx->event->params['resource']->id . '.txt';
        
        //...мы проверяем файлик, так как страница уже грузилась и файлик есть и подменяем кэш на содержимое неашего файлика.
        if(is_file){
            $modx->event->params['resource']->_content = file_get_contents($file);
        }
        
        break;
}
Итог, раздел грузился за 10 секунд (ну да, такой раздел, идея в другом), после плагина уже за 0.006 секунды, так как выдается готовая разметка.
Вопрос знатокам, на сколько такой подход вообще жизнеспособный по отношению к системе? Очень бы хотелось услышать комментарии.

Спасибо за донаты:
@Павел Бигель
Михаил
20 февраля 2020, 10:55
modx.pro
10
448
+16
Поблагодарить автора Отправить деньги

Комментарии: 10

Илья Уткин
20 февраля 2020, 13:03
+2
А если в фильтре выбрать какой-то параметр, потом скопировать адрес страницы (mFilter2 же меняет адрес на лету) и нажать F5? Плагин не учитывает GET-параметры, получается функционал дружественных урлов фильтра перестаёт работать.
    Михаил
    20 февраля 2020, 13:07
    0
    да, в данный момент верно. Можно подумать с этим, но если на пример просто какие то каталоги, то мне кажется использовать вполне можно
      Илья Уткин
      20 февраля 2020, 13:11
      +1
      А, еще если на странице есть части, которые для разных пользователей разные (например, авторизованный и неавторизованный пользователь) — такое решение тоже будет не совсем корректно. Но для простых каталогов да, очень полезная вещь.
        iWatchYouFromAfar
        20 февраля 2020, 13:25
        +1
        А если проверять в плагине пользователя и в зависимости от того, какой юзер запросил страницу, выдавать нужную разметку?
          Илья Уткин
          20 февраля 2020, 13:30
          +1
          Ну да, просто добавить в ключ кеша ID пользователя и md5-хеш GET-параметров. Типа такого, наверное:

          $file = MODX_BASE_PATH . 'resourcecache/' .
                  $modx->resource->uri . '/' .
                  $modx->resource->id . '/' .
                  md5($modx->toJSON($_GET)) . '/' .
                  'user_' . $modx->user->id . '.txt';
    Anton Erin
    20 февраля 2020, 18:10
    +2
    Не, ребят! Ну ведь же чудесная у нас CMF!
    И расширение классов есть, и можно выдавать файл с диска вместо кэша!

    Ну круто.
      Pavel Zarubin
      21 февраля 2020, 10:56
      +1
      Действительно))) Больше же нигде такого нет)))
        Anton Erin
        21 февраля 2020, 13:13
        +2
        Я что-то сказал про уникальность и неповторимость MODX?

        Радует, что в MODX можно делать также, как и в продвинутых фреймворках.
      Алексей
      20 февраля 2020, 21:17
      +5
      Плагин statcacheрешение 2014 2013 года. Только он даже php не дёргает для отдачи статики, если есть файл html в нужном каталоге. (локэйшн в nginx с этим прекрасно справляется, и, кстати, для олдфагов есть даже конфиг для apache)
        Сергей Шлоков
        22 февраля 2020, 11:47
        1
        +1
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10