Доброго! Задача такая, вырезать из html критические ошибки до их устранения. Допустим у меня две такие ошибки на поиск в движке которых уйдет много времени. <script src="/" type="text/javascript"></script> <link href="/" rel="stylesheet" type="text/css" /> Ошибка заключается в том, что видимо при оптимизации убирали ненужные css и js или объединяли ручками, и тупо закомментировали пути, а не само подключения. Получили такую неприятность. Решение: вырезать из html эти строки перед отдачей браузеру. (я, понимаю - временное решение) PHP: $ext_buffer = JResponse::getBody(); // Забрали сгенеренный html перед передачей // Размер html - 80кб // Вырежем ненужное перед передачей $ext_buffer = str_replace('<script src="/" type="text/javascript"></script>', " ", $ext_buffer); $ext_buffer = str_replace('<link href="/" rel="stylesheet" type="text/css" />', " ", $ext_buffer); JResponse::setBody($ext_buffer); // Вернем html в зад Все бы хорошо но растет ответ сервера, в принципе могу и закешировать кусок для всех страниц, и отдавать из мемкеша, но все же интересно как такую структуру ускорить. Спасибо!
Как ускорить str_replace strtr аналог --- Добавлено --- плюю на выше, достаточно просто в шапку html залесть и закомментировать пару строк <
Я, же в тему "PHP для новичков" а не "html для новичков" пишу. Ели еще учесть, что такое сделать: <script src="/" type="text/javascript"></script> <link href="/" rel="stylesheet" type="text/css" /> может только очень одаренный человек. Они подключаются из других php скриптов, найти быстро не выйдет.
И сильно растёт ответ сервера на двух вызовах str_replace? Там же не гигабайты html у вас, чтоб это так влияло... str_replace может первым аргументом принимать массив, поэтому вместо двух вызовов можно поставить один: PHP: $ext_buffer= str_replace(['<script src="/" type="text/javascript"></script>', '<link href="/" rel="stylesheet" type="text/css" />']," ", $ext_buffer);
На двух не сильно при 80кб, но ощутимо. на 15 уже проблема. Долго искала кто сервак тормозит, а этим решением еще и ссылки резали от платных модулей и.т.д strtr - работает быстрее если прописать массивом типа: при strtr на два вызова ответ менее 0,2 при str_replace от 0,7 до 1,6 PHP: $trans = array( '<script src="/" type="text/javascript"></script>' => '', '<link href="/" rel="stylesheet" type="text/css" />' => '', chr(9) => '', chr(13) => '' ); $ext_buffer = strtr($ext_buffer, $trans); Спасибо, как временное решение оставлю так.