Сжатие HTML




Читал одну статью и задумался, а почему на modx нет такой утилиты?

Почему он не выплевывает результат в сжатом виде для юзера?
Кто нибудь задавался таким вопросом или озадачивал себя такой задачей?


М.б. прикрутить указанный код (продублирую его ниже), к плагину и вызывать по определенному событию?

<?php
function sanitize_output($buffer) {
    $search = array(
        '/\>[^\S ]+/s',  // strip whitespaces after tags, except space
        '/[^\S ]+\</s',  // strip whitespaces before tags, except space
        '/(\s)+/s'       // shorten multiple whitespace sequences
    );
    $replace = array(
        '>',
        '<',
        '\\1'
    );
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
}
ob_start("sanitize_output");
...
Павел Левин
26 декабря 2014, 10:07
modx.pro
7
4 434
0

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

Володя
26 декабря 2014, 13:41
1
+2
так напиши в плагин и все…
У меня вот такой давным давно вариант где то валялся…
switch($modx->event->name){
    case 'OnWebPagePrerender': 
        if (!empty($modx->resource) 
            && $modx->resource->get('cacheable') 
            && $modx->resource->get('published')
            && $modx->resource->get('searchable')
            && $modx->resource->get('richtext')
            && $modx->resource->_output != ''
        )
        {  
            $html = &$modx->resource->_output;
            $html = preg_replace('|\s+|', ' ', $html);
        }
        break;   
}
    Павел Левин
    26 декабря 2014, 13:53
    0
    Не понятно на какое событие вешать, если необходимо во время вывода, чтоб сам исходник был нормального формата. OnWebPagePrerender?

    Если я всё правильно понял.
      Володя
      26 декабря 2014, 13:54
      0
      OnWebPagePrerender
        Павел Левин
        26 декабря 2014, 14:36
        0
        <?php
        $buffer = $modx->resource;
        function sanitize_output($buffer) {
            $search = array(
                '/\>[^\S ]+/s',  // strip whitespaces after tags, except space
                '/[^\S ]+\</s',  // strip whitespaces before tags, except space
                '/(\s)+/s'       // shorten multiple whitespace sequences
            );
            $replace = array(
                '>',
                '<',
                '\\1'
            );
            $buffer = preg_replace($search, $replace, $buffer);
            return $buffer;
        }
        if (!empty($buffer)) {
            ob_start("sanitize_output");
        }
        Сделал так, результата нет
          Володя
          26 декабря 2014, 14:51
          0
          чего ты сделал вот так?
          где сделал? В плагине? Конечно результата не будет.
          привел же выше рабочий плагин…
            Павел Левин
            26 декабря 2014, 14:57
            0
            Пример не работает и в месте с ним теперь и сайт.
            but1head
            26 декабря 2014, 15:59
            0
            библиотеки хотяб поставьте. Пример от Володи прекрасно работает.
            Виталий Киреев
            26 декабря 2014, 16:31
            0
            Сайт скорее всего не работает из-за того, что функции из кешированных сниппетов и плагинов ругаются, что они уже есть. Оберни в !function_exists.
            А серьезно сколько выхлоп от этого, байт 200?
              Илья Уткин
              26 декабря 2014, 17:32
              1
              +1
              <?php
              $bufer = &$modx->resource->_output;
              $search = array(
                      '/\>[^\S ]+/s',  // strip whitespaces after tags, except space
                      '/[^\S ]+\</s',  // strip whitespaces before tags, except space
                      '/(\s)+/s'       // shorten multiple whitespace sequences
                  );
              $replace = array(
                      '>',
                      '<',
                      '\\1'
                  );
              $buffer = preg_replace($search, $replace, $buffer);
        Павел Левин
        30 декабря 2014, 23:04
        0
        Работает.
        Заметил, что «к» превращается в "�", как быть?
          Борис И
          13 июня 2016, 20:37
          0
          Работает — сжимает, но почему то часть скриптов перестало работать (плавающий блок за посетителем и кнопки вверх-вниз)
            Павел Левин
            14 июня 2016, 10:30
            0
            Чтоб работало корректно, стоит закрывать функции ; иначе будет синтаксическая ошибка.
              Борис И
              14 июня 2016, 10:38
              1
              0
              Можно подробнее, как закрыть?
              Посмотрел minifyhtml — плагин, естественно тоже глючат скрипты
              <?php 
              $output = $modx->resource->_output;
              $output= preg_replace('|\s+|', ' ', $output);
              $modx->resource->_output = $output;
                Павел Левин
                14 июня 2016, 14:44
                0
                Точка с запятой в конце функции, зачастую библиотеки минифицируются и точку с запятой удаляют, получается ошибка т.к. следом идет наименование следующей функции или переменной и т.п.

                По коду ничем более помочь не смогу.
                  Борис И
                  14 июня 2016, 15:09
                  0
                  Спасибо, буду думать
            Lori
            30 августа 2021, 20:24
            0
            странно, на двух сайтах работает, а на третьем нет. причем событие вызывается дважды. сделал вывод в лог $html, а он пустой.
            Алексей Федоров
            14 июня 2016, 07:07
            +1
            Решение уже есть в официальном репозитории — minifyhtml. Сам пока не пробовал в работе, но на заметку взял. Кто попользуется отпишитесь, как результат.
              Taras
              12 января 2018, 15:08
              0
              как пропускать теги
              <pre>
              Abu
              Abu
              14 июня 2016, 15:36
              +2
              Имхо, экономия на спичках. Правильно настроенный сервер и сам все сжимает и передаёт в gzip deflate
                Борода
                15 июня 2016, 00:12
                0
                Почему тогда сжат исходный код гугла и яндекса?
                  Илья Уткин
                  15 июня 2016, 00:24
                  +1
                  На миллионах посетителей в день каждый байт на счету.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                25