За последние 24 часа нас посетили 63074 программиста и 1741 робот. Сейчас ищут 911 программистов ...

Как ускорить str_replace

Тема в разделе "PHP для новичков", создана пользователем oxana77, 8 сен 2017.

  1. oxana77

    oxana77 Новичок

    С нами с:
    7 авг 2017
    Сообщения:
    23
    Симпатии:
    0
    Доброго!
    Задача такая, вырезать из html критические ошибки до их устранения.
    Допустим у меня две такие ошибки на поиск в движке которых уйдет много времени.

    <script src="/" type="text/javascript"></script>
    <link href="/" rel="stylesheet" type="text/css" />

    Ошибка заключается в том, что видимо при оптимизации убирали ненужные css и js или
    объединяли ручками, и тупо закомментировали пути, а не само подключения.

    Получили такую неприятность.

    Решение: вырезать из html эти строки перед отдачей браузеру.
    (я, понимаю - временное решение)

    PHP:
    1.     $ext_buffer = JResponse::getBody();    // Забрали сгенеренный html перед передачей
    2.                                                                    // Размер html - 80кб
    3.  
    4.     //    Вырежем ненужное перед передачей
    5.  
    6.     $ext_buffer = str_replace('<script src="/" type="text/javascript"></script>', " ", $ext_buffer);
    7.     $ext_buffer = str_replace('<link href="/" rel="stylesheet" type="text/css" />', " ", $ext_buffer);
    8.  
    9. JResponse::setBody($ext_buffer);       // Вернем html в зад
    Все бы хорошо но растет ответ сервера, в принципе могу и закешировать кусок для всех страниц,
    и отдавать из мемкеша, но все же интересно как такую структуру ускорить.

    Спасибо!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Как ускорить str_replace
    strtr аналог
    --- Добавлено ---
    плюю на выше, достаточно просто в шапку html залесть и закомментировать пару строк <
     
  3. oxana77

    oxana77 Новичок

    С нами с:
    7 авг 2017
    Сообщения:
    23
    Симпатии:
    0
    Я, же в тему "PHP для новичков" а не "html для новичков" пишу.
    Ели еще учесть, что такое сделать:
    <script src="/" type="text/javascript"></script>
    <link href="/" rel="stylesheet" type="text/css" />
    может только очень одаренный человек.
    Они подключаются из других php скриптов, найти быстро не выйдет.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    И сильно растёт ответ сервера на двух вызовах str_replace? Там же не гигабайты html у вас, чтоб это так влияло...
    str_replace может первым аргументом принимать массив, поэтому вместо двух вызовов можно поставить один:
    PHP:
    1. $ext_buffer= str_replace(['<script src="/" type="text/javascript"></script>', '<link href="/" rel="stylesheet" type="text/css" />']," ", $ext_buffer);
     
  5. oxana77

    oxana77 Новичок

    С нами с:
    7 авг 2017
    Сообщения:
    23
    Симпатии:
    0
    На двух не сильно при 80кб, но ощутимо. на 15 уже проблема.
    Долго искала кто сервак тормозит, а этим решением еще и ссылки резали от платных модулей и.т.д
    strtr - работает быстрее если прописать массивом типа:
    при strtr на два вызова ответ менее 0,2 при str_replace от 0,7 до 1,6
    PHP:
    1.  
    2. $trans = array(
    3.     '<script src="/" type="text/javascript"></script>' => '',
    4.     '<link href="/" rel="stylesheet" type="text/css" />' => '',
    5.     chr(9) => '',
    6.     chr(13) => ''
    7.                 );
    8. $ext_buffer = strtr($ext_buffer, $trans);
    Спасибо, как временное решение оставлю так.