Pull to refresh

Comments 15

Когда-то давно, из любопытства, как оно там у буржуев, взял заказ на апворке. Был поражён тем какой гавнокод плещется даже в популярных плагинах для вордпресса. Например какой-то популярный плагин для локализации, мне помнится, просто во вложенных циклах обходил буферизированный контент производя замены слов на "локализованные". Конечно оно страшно тормозило, отчёт профилировщика мог вызвать у неподготовленного человека шок.

WordPress? Вчера разгребал милейший race condition в стоковой поставке 5.7.3. В библиотеке генерации паролей для новых аккаунтов:

	function generatePassword() {
		if ( typeof zxcvbn !== 'function' ) {
			setTimeout( generatePassword, 50 );
			return;
    } ....

Т.е. проверяем, подгружена ли определенная функциональность, и если нет, давайте подождем 50 миллисекунд и попробуем еще раз (это вместо того, чтобы нормально завязаться на инициализацию, или исправить проблему с тем, почему код вызывается до полной инициализации). И так в Вордпрессе сделано чуть более, чем почти всё.

Для подобных задач пользуюсь инструментами от blackfire. Могу смело рекомендовать. Показывает всё тоже, но в более удобной форме.

Нет, серьезно, после оптимизации получилось всего 6 секунд и заказчик доволен? /sarcasm

на этот раз проблема в другом

Проблема в том, что мыши колются, плачут, но продолжают грызть WP-кактус..

Это мой локальный сервер где в ноуте кроме OpenServer работает ещё куча других программ. Я потому и под конец написал что после ещё донастроек боевого сервера результат ~400мс, а без кеширования 1,5-2 сек, только эти донастройки касаются только этого сайта и для других мало пользы от этой информации.

Заказчик доволен хотя бы тем что он не просил меня сделать из его сайта суперджет. Он попросил посмотреть что так тормозит его сайт. Статью пишу в надежде что пользователи могут узнать что WP Object Cache может тупить, и что транзиенты можно использовать как хранилище кеша (для вот таких маленьких кусков).

Хорош или плох WP - не тема этой статьи. Спасибо что хоть язык php не поругали)

Да, применение WP+WooCommerce для большого каталога — это ошибка.


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


Я бы ещё понял, если бы вы настроили нормальное кеширование через Nginx. Но — нет, пошли по пути костылестроения. Лучше настройте джинкс, главное, корзину не закешируйте ))

Найду человека который написал тему для сайта, передам ему) Не понимаю причём тут нжинкс с кешированием, я же отлавливаю тяжелый кусок кода

Хотя справедливости ради да, кеш от nginx лучше чем плагинами. Спасибо

Я понимаю вашу боль, мне приходилось возиться с сайтом на Dupal 5 с теми же проблемами. Я пару лет его потихоньку костылил, но единственное нормальное решение — это переложить кеширование всего, что можно, на Nginx. Тогда кривые и тяжелые запросы (а Друпал в этом плане ещё хуже ВП) просто не запускаются, и после прогрева кеша сайт летает. Особенно это актуально для больших каталогов.

Что касается xhprof, то он врет на проектах с большим количеством обрабатываемых сущностей и вложенностей. Я так замерял наш проект на ларе через xdebug и xhprof, и эти инструменты дали наводку что больше всего времени занимает трансформация моделей в апи ответ. Я сперва поверил, оптимизации там крутил, а потом проверил старым дедовским методом через echo time() в контроллере, и оказалось что трансформеры вообще немного отжирали. Судя по всему логирование каждой вложенности дается очень дорого, вот если бы можно было регулировать уровень до которого анализ должен доходить...

Может кто-то знает способ получить стэктрейс для работающего в текущий момент php-fpm процесса? Чтобы понять в каком месте он выполняется в текущий момент.

Спасибо, но речь не о том, чтобы процесс получил свой стэктрейс, с этим проблем нет.

Вопрос в том, как снаружи узнать, в каком месте кода сейчас выполняется php-fpm процесс (возможна соотв модификация кода). Ну, ждет ответ от базы, например, или вычисляет что-то в какой-то функции.. С точностью до строки - вообще идеально, с точностью до функции - тоже годится. Есть ли какой-то модуль для этого?

Никогда этого не делал, но иногда, хотел, потрогать.

Не знаю как оно, даст ли прийти к вашей цели. Но есть, как я это понимаю, штука для мониторинга приложений на php (и не только на php, а ещё и есть штука для отслеживания пользовательских ошибок в исполняемом в их же браузерах javascript).

Все, это, конечно стоит безумных денег для сколь либо приемлемой аналитики. И с поддержкой в России у них "так себе" (никак). Но сервис запили знатный https://docs.newrelic.com/docs/agents/php-agent/getting-started/introduction-new-relic-php/

К сожалению, xdebug не является серебряной пулей в определении узкого горлышка, и не подойдет для каждого проекта. Но вот для просмотра стектрейса - шикарная штука!
Пробовал еще xhprof, но он тоже сильно грешил при работе с большим кол-вом вложенностей...

Sign up to leave a comment.

Articles