WPML

В последние месяцы мы почувствовали, что наш собственный сайт — wpml.org — стал работать медленнее. Сначала мы применили радикальный подход и обновили сервер. Когда это не помогло, мы серьезно взялись за дело и тщательно проанализировали проблему. Результатом стал сегодняшний релиз, который снизил нагрузку на наш процессор и время отклика на 70%.

Что мы узнали об анализе производительности


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

Метод тестирования производительности, который мы использовали до сих пор, заключался в следующем:

  • Создать большую базу данных с множеством записей, метаданных, рубрик и пользователей
  • Составить список «тяжелых» страниц
  • Загрузить их много раз, измерить время загрузки и провести профилирование

Это показало нам страницы фронтенда и админ-панели, которые нужно было отладить и оптимизировать. Мы постарались сократить количество запросов, избежать долгих запросов и написать эффективный PHP-код.

Так чего же не хватает?

WordPress и WPML устроены немного сложнее, чем просто «запросить страницу и дождаться ее загрузки». Все происходит через базу данных, которая является общим ресурсом. То, что посетитель А делает с базой данных, может повлиять на то, что получает посетитель Б.

Чтобы понять эти узкие места, мы установили инструмент под названием Appoptics на наш рабочий сайт. Он позволил нам измерить, какие функции и запросы отнимают время, чтобы мы могли проанализировать причины.

Фактическое улучшение производительности


Мы обнаружили, что одна, казалось бы, безобидная операция в модуле Перевод строк имела серьезный конфликт ресурсов с частым запросом к таблице wp_options от другого плагина. Если выполнить этот вызов всего 1 млн раз, Вы не почувствуете никаких проблем. Однако, когда другим страницам нужно получить доступ к таблице wp_options, им приходится ждать, пока строки не освободят ее. Список ожидающих запросов растет, переполняет базу данных, и начинается сущий кошмар.
Улучшение производительности wpml.org

Глядя на график, Вы можете видеть, что большая часть ресурсов нашего сервера уходила на базу данных (ту самую таблицу, которая постоянно блокировалась и разблокировалась). Вы, вероятно, можете догадаться, в какое время мы применили исправление.

Но у меня есть другие проблемы с производительностью, можете ли Вы их исправить?


То, что мы обнаружили, определенно поможет не только wpml.org, но и многим другим высоконагруженным сайтам, использующим WPML. Если у Вашего сайта очень небольшая нагрузка, Вы вряд ли почувствуете это улучшение. Оно затрагивает только сайты с большим количеством параллельных процессов и пользователей, выполняющих множество разных действий.

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

Кстати, наш цикл повышения производительности выявил узкие места не только в WPML. Мы исправили то, что нашли в WPML, но заметили серьезные проблемы и в других местах. Некоторые из них мы пропатчили сами, а некоторые оптимизировали через базу данных.

Если Вам это интересно, дайте нам знать, и мы поможем Вам настроить анализ производительности на Ваших рабочих сайтах. Затем мы с радостью поможем Вам проанализировать результаты. Если мы найдем что-то в WPML, мы это исправим. Велика вероятность, что сайты с проблемами производительности обнаружат ряд проблем, исходящих из самых неожиданных источников.

Что еще нового в WPML 4.2.6

Ядро WPML 4.2.6

  • Добавлен фильтр wpml_post_edit_meta_box_priority для изменения приоритета метабокса редактирования записи WPML
  • Исправлена проблема с обновлением плагинов в случае установки в подкаталог — теперь всегда используются URL-адреса сайта
  • Уведомления сохраняются только при необходимости, чтобы сократить количество лишних записей в таблицу wp_options
  • Исправлена проблема безопасности со ссылками переключателя языков

WPML Перевод строк 2.10.4

  • Исправлена проблема с импортом .mo-файлов в модуле Перевод строк, благодаря чему таблица wp_options больше не обновляется без необходимости

WPML Управление переводами 2.8.5

  • Улучшено оформление элементов управления пагинацией на странице «Задания на перевод»
  • Исправлена проблема с назначением переводчиков на странице «Задания на перевод», когда язык админ-панели отличается от английского
  • Исправлено неправильное содержимое столбца «Переведено», когда язык админ-панели отличается от английского

WPML Media Translation 2.5.2

  • Уведомления сохраняются только при необходимости, чтобы сократить количество лишних записей в таблицу wp_options

WPML CMS Nav 1.5.1

  • Повышена производительность за счет очистки кеша только тогда, когда это применимо

Скачивание и обновление


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

Мы рекомендуем создавать резервные копии перед установкой любых обновлений на Вашем сайте.

Отзывы? Вопросы? Предложения?


Наши сайты теперь работают намного быстрее, но мы хотели бы узнать и о Ваших. Пожалуйста, оставляйте свои комментарии, и мы обязательно Вам ответим.

Считаете это полезным? Поделитесь этой статьей: