Руководство по переходным процессам в WordPress
Опубликовано: 2023-02-12Как разработчик WordPress, вы, вероятно, уже знаете, насколько важна производительность для успешного веб-сайта. Однако понимание переходных процессов в WordPress и того, как они помогут вам оптимизировать ваши проекты, может быть немного сложным.
К счастью, когда вы их разбираете, переходные процессы не так уж сложны для понимания. Пока вы помните несколько ключевых рекомендаций, вы должны быть на пути к их включению в свой следующий плагин WordPress.
В этом посте мы расскажем о том, что такое переходные процессы WordPress, а также о том, как и когда их использовать. Есть много вещей, которые нужно охватить, так что давайте приступим к делу!
Что такое временные переходы WordPress?
Чтобы понять переходные процессы, полезно иметь некоторые базовые знания о кэшировании и интерфейсах прикладного программирования (API).
Кэширование данных веб-страницы — это, по сути, способ временного сохранения данных веб-сайта, чтобы при наличии нескольких запросов на одни и те же данные сайту не приходилось повторно запускать MySQL или PHP. Это может сэкономить секунды времени и снизить нагрузку на сервер.
Идея состоит в том, чтобы временно хранить данные, отсюда и слово «переходные процессы». API Transients похож на API параметров WordPress. Вы даете данным имя и значение, которое может быть сложным, например многоуровневый массив PHP, и оно сохраняет данные. Позже, возможно, даже по другому запросу, вы сможете получить эти данные, используя их имя. Разница в том, что данные в таблице параметров останутся навсегда. То есть вы можете хранить данные, и через три года они все равно будут там.
Каждый переход состоит из трех частей:
- $ переходный. Это строка, используемая для идентификации переходного процесса и его вызова. Его также называют «ключом» или «именем» переходного процесса.
- $значение. Это информация, извлекаемая через API. Значение переходного процесса может быть объектом, массивом, числом или строкой.
- $ срок действия. Это то, как долго переходный процесс остается в вашей базе данных, прежде чем он будет удален, и вам придется снова обращаться к необходимой информации через API.
На первый взгляд, это все, что касается переходных процессов WordPress. Однако, чтобы правильно их использовать, вам нужно знать кое-что еще.
Однако данные о переходных процессах никуда не денутся. В этом-то и дело! Вы можете запросить данные и обнаружить их отсутствие одним из двух способов. Во-первых, когда вы сохраняете данные, вы указываете дату истечения срока действия. Например, можно сказать: «Храни это три часа». Поэтому, если вы запросите его через четыре часа, он будет потерян.
Второй способ заключается в том, что часть данных может просто исчезнуть в любое время и по любой причине. Звучит странно, я знаю! Какой смысл хранить данные, если на них нельзя рассчитывать? Дело в том, что хранилище — это запрос, который WordPress попытается выполнить, но из-за этой гибкости можно использовать различные виды реализации для временного хранилища, а это означает, что можно использовать различные передовые технологии, чтобы сделать переходные процессы чрезвычайно эффективными. , и работать должным образом даже в кластерной среде с несколькими серверами.
Из-за этого «исчезновения в любое время» вы обычно используете переходные процессы для кеша. То есть, если вам нужно вычислить что-то, что требует реального времени, например, медленный запрос MySQL или получение данных из внешнего источника, такого как чей-то Twitter или RSS-канал, вы можете сохранить вычисленные данные в переходном процессе, зная, что если они пропадут его всегда можно воссоздать. Но в обычном случае — когда они НЕ пропадают — вы быстро получаете данные без необходимости повторного вычисления.
Преимущества использования Transients на вашем сайте WordPress
Как мы упоминали ранее, основное преимущество переходных процессов заключается в том, что они повышают производительность сайта. Вот примерное описание того, как это работает, на примере плагина Google Site Kit.
Когда плагин активирован, он использует API для отображения данных с таких платформ, как Analytics и Search Console, на панели управления WordPress. Без переходных процессов WordPress пришлось бы извлекать эту информацию из каждого инструмента каждый раз, когда вы просматриваете панель инструментов Site Kit:
Вместо этого Site Kit включает переходные процессы, которые кэшируют данные из Analytics и Search Console. Они хранятся в течение одного дня (или одного часа, если платформа не возвращает данные).
При каждом последующем доступе к панели инструментов Site Kit WordPress может быстро извлекать сохраненную информацию из вашей базы данных вместо повторного вызова API. По истечении срока действия старые данные удаляются.
Это означает, что вам не нужно каждый раз ждать загрузки результатов. Это удобно в различных ситуациях, например, для отображения количества репостов ваших сообщений в социальных сетях или отображения ленты новостей.
Недостатки использования Transients на вашем сайте WordPress
Проблемы с Transients вызывают у вас разные и трудно воспроизводимые поведения, которые вы получаете, когда ваш плагин/тема работает с различными реализациями Transients. Различные реализации переходных процессов означают, что вы столкнетесь с проблемами ТОЛЬКО в определенных конфигурациях с определенными типами сайтов и никогда не столкнетесь с другими. Как разработчик, если вы не знаете об этой ловушке и не кодируете соответствующим образом, вы будете думать, что ваш код исправен, но на самом деле он сломается в полевых условиях, и вы даже не будете знать, как его воспроизвести. !
Когда использовать WordPress Transients
Переходные процессы удаляются из вашей базы данных по истечении срока их действия. По этой причине вы хотите использовать их только для информации, которая постоянно воссоздается.
Кроме того, хотя они могут повысить производительность вашего проекта, переходные процессы лучше использовать для больших запросов и удаленных вызовов. Если для создания переходного процесса потребуется больше кода, чем просто новый запрос ресурса каждый раз, когда он необходим, вам лучше обойтись без него.
Управление временными переходами WordPress
Если вы хотите легко видеть и управлять переходными процессами, которые в настоящее время работают на вашем сайте WordPress, вы можете установить плагин Transients Manager:
Он предоставляет полный список переходных процессов, который вы можете найти, перейдя в Инструменты > Переходные процессы :
Здесь вы можете увидеть все три переходных элемента, которые мы перечислили ранее — ключ (имя), значение и срок действия. Вы можете отредактировать любую из этих функций, щелкнув ссылку «Изменить» :
Вы также можете удалять переходные процессы по отдельности или массово.
Основные операции, используемые в переходных процессах
Когда дело доходит до кодирования ваших собственных переходных процессов, вам, вероятно, придется использовать три основные операции. Мы описали каждый из них ниже, продолжая использовать Site Kit в качестве примера.
1. Настройка переходных процессов
Создание или «установка» переходных процессов — это процесс определения ключа, значения и срока действия, а также применение этой информации к соответствующим данным. Для этого вы будете использовать следующий формат:
Set_transient ('key', $value, expiration_period)
Вот код, используемый в Google Site Kit для установки переходного процесса, в котором хранятся данные аналитики:
// Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }
Временный ключ — googlesitekit_analytics_has_data (определен ранее в коде), значение — $has_data или $has_data? , а срок действия — один день или один час (в зависимости от значения).
2. Получение переходных процессов
Получение переходных процессов немного сложнее. Во-первых, вам нужно использовать функцию для запроса необходимых данных. Затем вы проверите, есть ли у него соответствующий переходный процесс, который следует загрузить, вместо того, чтобы делать новый запрос API.
Результат может выглядеть примерно так:
function some_function(){ $transient = get_transient('key');
Затем вам нужно будет либо вернуть переходный процесс, либо удалить данные с истекшим сроком действия и сделать новый вызов источнику. Наконец, вы должны установить переходный процесс после того, как вы вернули новые данные, чтобы они снова сохранялись до тех пор, пока не истечет срок действия.
В Google Site Kit это выглядит так:
/** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }
Затем за этим кодом должен следовать фрагмент, который мы включили в предыдущем разделе для настройки переходных процессов.
3. Удаление переходных процессов
В некоторых случаях вы можете обнаружить, что хотите удалить переходный процесс. Например, если вы хотите всегда видеть самую актуальную аналитику в Google Site Kit, было бы лучше не кэшировать данные (хотя мы не рекомендуем вам фактически удалять переходные процессы Site Kit).
В противном случае плагин будет показывать одни и те же результаты в течение дня, даже если у вас были новые посетители. Поскольку переходный процесс длится 24 часа, данные, которые вы просматриваете днем, будут просто кэшированной версией данных, которые вы загрузили утром.
Самый простой способ удалить переходные процессы — использовать плагин Transients Manager. Однако, если вы хотите вместо этого использовать код, вы можете использовать функцию delete_transient() . Все, что вам нужно, это временный ключ:
delete_transient('key');
Однако вам придется повторить это для каждого переходного процесса, который вы хотите удалить.
Временная экспирация: как это работает?
Переходные периоды экспирации могут быть выражены несколькими различными способами. Самые простые два варианта:
- В секундах ( set_transient('key', $value, 86400))
- Использование констант времени WordPress ( set_transient('key', $value, DAY_IN_SECONDS))
Кроме того, вы также можете установить бесконечные переходные процессы. Это может быть полезно в ситуациях, когда вы хотите сохранить временные данные без изменений, пока вы вручную не удалите и не сбросите кэшированную информацию.
Создать бессрочные транзиенты довольно просто. Просто оставьте параметр истечения срока действия в функции set_transient пустым или определите его как ноль.
Понимание API WordPress Transients
WordPress Transients API — это просто средство кэширования информации в базе данных вашего сайта. Он включает все связанные операции, которые мы обсуждали в этом посте, включая настройку, получение и удаление переходных процессов.
Другими словами, Transients API — это только часть ядра WordPress, которая позволяет вам использовать переходные процессы.
Две наиболее распространенные реализации бэкэнда Transients API:
- Тот, который встроен в WordPress, и, следовательно, самый распространенный на сегодняшний день. Временные значения хранятся в таблице wp_options так же, как и обычные параметры. С переходными процессами сохраняется дополнительная опция для хранения даты истечения срока действия. При доступе к переходу WordPress сначала извлекает дату истечения срока действия. Если срок его действия истек, WordPress удаляет обе опции из таблицы, тем самым «очищая» данные, и делает вид, что данных никогда не было. Если срок его действия не истек, он берет содержимое из таблицы параметров.
- Memcached. Memcached — это очень простое, но эффективное и надежное программное обеспечение на стороне сервера, предназначенное для того, чтобы делать именно то, что должен делать Transients API — хранить данные на основе ключа, срок действия которого истекает в определенное время и который может исчезнуть в любой момент, если это необходимо. к.
Использование memcached вместо WordPress Transients имеет два особых преимущества, поэтому мы автоматически предварительно настраиваем его для вас здесь, в WP Engine. У нас есть твоя спина
я. Memcached в 10-100 раз быстрее сохраняет и извлекает значения, чем WordPress Transients, что особенно интересно, поскольку смысл переходных процессов заключается в кэшировании данных для увеличения скорости сайта.
II. Memcached устанавливает максимальное количество места, которое он будет занимать с данными (например, 64 МБ ОЗУ), что означает, что если сайт хранит слишком много данных одновременно, он автоматически удаляет старые данные и, следовательно, никогда не заканчивается место. Но встроенные WordPress Transients будут хранить произвольное количество данных в таблице параметров.
Применение переходных процессов в вашей разработке
Предположим, вы многократно читаете и записываете один и тот же ключ Transients, и предположим, что это 1 КБ данных. В этом случае и Memcached, и WordPress Transients будут делать именно то, что вы от них ожидаете, и оба будут занимать около 1 КБ пространства (либо в таблице параметров, либо в memcached).
Теперь предположим, что вы читаете и записываете разные ключи Transients, разные для каждого сеанса браузера. Короче говоря, что, если вы храните данные сеанса пользователя в Transients? Это имеет смысл на поверхности. Данные сеанса не должны храниться вечно, и вы не хотите возиться со специальными таблицами базы данных. Кроме того, многие хостинговые компании WordPress не разрешают сеансы PHP, так что это действительно лучший вариант. Он даже быстрый и многосерверный.
Вот где появляются различия. С Memcached и сайтом с низким трафиком этот метод работает. Значения сохраняются некоторое время, а затем удаляются по истечении срока их действия. Однако, если сервер сильно загружен, объем данных сеанса, которые сервер должен хранить, превысит пространство, доступное в memcached, и поэтому вы начнете терять данные сеанса раньше, чем вы думали. И если бы вы не тестировали именно в такой, сильно нагруженной среде, вы бы никогда об этом не узнали. В общем, эти среды заканчивают тем, что заполняют memcached так быстро, что фактически memcached отключается, потому что он никогда не может удерживать данные достаточно долго, чтобы быть полезным. Фактически у вас вообще нет кеша Transient API!
Но с WordPress Transients вы получаете другое, но все же очень нежелательное поведение. Поскольку значения записываются в базу данных, а не в блок оперативной памяти фиксированного размера, все они сохраняются. Это означает, что даже с сильно загруженным сайтом у вас все еще есть данные сеанса. Потрясающий!
Или вы так думали. Потому что в Transient API не сказано, что происходит, когда вы используете уникальные ключи, такие как сеансы. И что происходит со встроенным методом, так это то, что таблица опций бесконечно заполняется! Потому что: «очистка старых данных» WordPress работает только тогда, когда вы запрашиваете ключ (как мы уже говорили ранее). Если вы просто оставите ключ, он навсегда останется в таблице опций. Нет отдельного процесса, который очищает их!
Мы не только знаем об этой проблеме, мы хотим помочь нашим клиентам, которые могут запускать код, который этого не понимает. Вот тут-то и появляется «управляемый» в Managed WordPress! Каждую ночь у нас есть автоматизированный процесс, который просматривает вашу таблицу опций на предмет переходных процессов с истекшим сроком действия и удаляет их (как данные, так и элемент даты истечения срока действия). Бум! Они ушли, и вам не нужно о них беспокоиться.
Так что это здорово, что мы делаем это, но как разработчик общего плагина или темы, которая должна правильно работать в любой среде хостинга, вы не можете сделать это во всех потенциальных средах, в которых может быть развернут ваш плагин или тема, и вы хотите убедиться, что вы предоставляете своим пользователям и клиентам максимально оптимизированный код.
Однако теперь, когда вы знаете, как Transients может пойти не так, может быть, вам стоит взглянуть и посмотреть, как вы можете сделать свой код более эффективным. Скорее всего, если вы дочитали до этого места, вам нравится оптимизировать свой код, и этот пост в блоге может бросить вам перчатку и побудить вас переписать некоторые вещи, чтобы сделать их более масштабируемыми!
Делайте больше с вашим сайтом WordPress
Ключевым моментом для разработчика WordPress является предоставление вашим конечным пользователям доступа к удаленным данным при сохранении высокой производительности. Переходные процессы WordPress могут помочь вам в этом.
Тем не менее, не помешает получить дополнительную помощь от молниеносного хостинга WordPress и ресурсов профессиональных разработчиков. Независимо от того, новичок вы в кодировании или опытный профессионал, мы готовы помочь. Ознакомьтесь с нашими планами на сегодня!