Сегодня я запускаю тест по моей базе данных, чтобы изучить разницу в скорости доступа к ключу из опций, пользовательских таблиц и переходных процессов. Я запустил тест 1000 раз, и вот время, необходимое для выполнения 1000 операций get:
Имейте в виду, что таблица параметров используется как для параметров, так и для переходных процессов в большинстве систем, и эта таблица была оптимизирована с добавлением индексов. Так что это не честное сравнение
get_transient () 0,0245 секунд get_option () 0,0068 секунд операция простого выбора из пользовательской таблицы 0,65 секунд
Это также несправедливое сравнение, параметры с установленным autoload
параметром будут загружены в расширенный в одном запросе в начале. Так get_option
что тянет WP_Cache
, вариант уже найден.
TLDR: На самом деле выборка не производится, она уже получена, она просто извлекается из памяти благодаря autoload
опции
Я также проверил, что переходный процесс не истек во время этого теста.
Это не должно влиять на нормальную систему при переходном извлечении, ведь он не знает, истек ли он, пока не будет извлечен.
Вопрос в том, быстрее ли get_option (), чем get_transient (), или я что-то испортил в своем тесте?
Это зависит:
- В большинстве систем переходные процессы хранятся с использованием опций, оба включают
get_option
вызов
- Параметры с
autoload
установленным на true все загружаются в один вызов в начале, поэтому они хранятся в памяти, после этого запросы не выполняются
- Кеширование объектов кэширует как параметры автозагрузки, так и переходные процессы
Настраивается ли задержка пользовательской таблицы из-за того, что WordPress кэширует параметры по умолчанию?
Очень возможно, но скорость выполнения выбора во многом зависит от запроса и дизайна таблицы
Кроме того, параметры также кэшируются различными плагинами кэширования, такими как переходные процессы?
Да, WP_Cache
используется, который будет хранить его в памяти для остальной части запроса. Плагины для кэширования могут сохранять эти значения по соображениям производительности.
стабильность
Все они кэшируются через, WP_Cache
поэтому при втором запросе БД не задействована.
Изменчивость и она зависит
Все это предполагает общую основу, но как насчет объектных кешей?
Давайте представим экземпляр MemcacheD или экземпляр Redis (я НАСТОЯТЕЛЬНО рекомендую вам сделать это, если у вас есть возможность, ОГРОМНОЕ повышение производительности для хорошо построенных сайтов, особенно если вы используете их для кэширования страниц, если у вас нет чего-то вроде настройки Varnish)
Теперь у нас новая ситуация:
- Теперь данные хранятся в оперативной памяти, и, как только они извлекаются из БД, они загружаются, и время доступа значительно сокращается. Все еще медленнее, чем переменная, но значительно быстрее, чем запрос к базе данных
- Многие новые данные хранятся в
WP_Cache
том, что обычно нет. Например, WP_Post
объекты, мета и т. Д.
WP_Cache
теперь сохраняется через запросы
- MemcacheD и т. Д. Могут устранить просроченные переходные процессы и т. Д.
Теперь переходные процессы и параметры имеют одинаковую стоимость доступа. Они уже были близки, но теперь они ничтожны и больше связаны с нагрузкой на процессор во время запроса.
Так что для производительности я должен использовать переходные процессы или параметры?
Хотя вопрос стоит задаться вопросом, ответ таков: разница незначительна и находится в пределах погрешности
Так что прекратите микрооптимизацию, это один и тот же носитель, а это не стоит вашего времени
- Используйте опции, если вам нужно хранить что-то, что широко на сайте
- Используйте переходные процессы для временного хранения дорогих для вычисления вещей, чтобы вам не приходилось в следующий раз
Не стоит тратить время на то, чтобы выбрать один из двух в зависимости от производительности, в этом нет существенной разницы.
Есть намного лучшие вещи для оптимизации, которые дают значительно большую экономию, например, использование таксономий вместо мета в пост-запросах, не использование __not
параметров стиля, выполнение меньшего количества операций на странице, установка кеша объектов, уменьшение количества постов на странице, избегание удаленных запросов. так далее
А как насчет таблицы, которая будет ...
Нет, таблица параметров уже хорошо оптимизирована, использование пользовательской таблицы просто переместит операции за пределы системы WP Caching, заставив вас написать свою собственную.