Хотите знать больше?
  • Главная
  • О нас
  • Услуги
    • Разработка веб-сайтов
    • Абонентское обслуживание сайтов
    • Обновление веб-сайтов
    • SEO оптимизация и продвижение
    • Контекстная реклама
    • Хостинг для сайтов
    • Регистрация доменных имен
    • Проведение фотосессий
  • Портфолио
  • Новости
  • Контакты
Previous Post
Next Post
Май 07
in Обновления 0 comments

Снижаем потребление памяти WordPress

Снижение пикового потребления памяти благодаря в два раза заменой одной функции

Пиковое потребление оперативной памяти WordPress можно снизить приблизительно два раза и практически бесплатно. В чём секрет? В использовании правильных функций для работы с базой данных.

Опытные программисты знают, что API MySQL предоставляет два варианта работы с результатом запроса:

  1. Последовательная обработка результата — при этом не происходит никакой буферизации результата, данные отдаются от сервера клиенту, минуя временные таблицы и буфера. В этом случае обработка результатов может производиться только последовательно.
  2. Буферирование результата запроса — результат полностью читается во временный буфер, что позволяет осуществлять произвольный доступ к результату.

Первому варианту соответствует использование функции PHP mysql_unbuffered_query(), второму — mysql_query().

WordPress использует именно второй вариант. Но специфика функции wpdb::query() такова, что, выполнив запрос, WordPress полностью читает ответ в переменную wpdb::last_result.

Таким образом, при выполнении запроса, возвращающего большой объём данных:

  1. MySQL выделит память для временного буфера под весь результат запроса
  2. WordPress создаст локальную копию результата запроса
  3. После вызова mysql_result_free() временный буфер будет освобождён

В результате связка WordPress + MySQL съест в два раза больше памяти, чем нужно. Это особенно ощутимо на системах с небольшим количеством доступной оперативной памяти.

Лечение: в файле wp-includes/wp-db.php заменяем mysql_query на mysql_unbuffered_query.

Из бонусов: при использовании mysql_unbuffered_query() PHP будет получать данные по мере их доступности (во время выполнения запроса), в то время как при использовании mysql_query() пришлось бы ждать окончания выполнения запроса.

Использование небуферизованных запросов, судя по отзывам, очень сильно позволяет повысить производительность.

Share this:
1624
0
About the Author: TiDiSi

  • Снижаем потребление памяти WordPress

    Снижение пикового потребления памяти благодаря в два раза заменой одной Read more
    in Обновления 0 comments
    0

  • «Яндекс» выпустил антивирус для сайтов
    Команда разработчиков «Яндекса» сообщила о выпуске антивирусного решения Manul, Read more
    in Безопасность 0 comments
    0
  • Вниманию интернет-магазинов
    Важная информация для всех владельцев интернет-магазинов. Министерство торговли Read more
    in Интернет 0 comments
    0

Sorry, the comment form is closed at this time.

Свежие записи
  • В WordPress исправлены три опасные уязвимости
  • Яндекс запустил гиперлокальное таргетирование рекламы на конкретные места
  • Шпаргалка: как запустить рекламную кампанию в «Яндекс.Директ»
  • «Яндекс» запустил виртуальную АТС для бизнеса
  • Защищенный анонимный сервис ProtonMail от разработчиков из ЦЕРН стал публичным
Copyright © 2002-2017 Web-Studio TiDiSi All Rights Reserved.