Как оптимизировать производительность WordPress через постоянные ссылки: теория

Оптимизация производительности WordPress через постоянные ссылки (теория)

В этой статье я расскажу о методах оптимизации WordPress, которые я назову "оптимизацией для постоянных ссылок". Этот принцип я использую на некоторых сайтах, где используются URL категорий. В случаях, когда URL содержит только название поста, его ID, дату и название, или любое их сочетание, эта оптимизация не имеет смысла. Конечно, также нет необходимости применять эту оптимизацию, если постоянные ссылки вообще не включены.

Немного поэзии

Однажды вечером, когда интернет не работал уже четвертую неделю, я задумался о разработке методов оптимизации. В те редкие дни, когда сети не было, что-то новое пришло ко мне в голову — это было около шести месяцев назад.

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

Теория постоянных ссылок

Пользователи WordPress, наверное, знакомы с функцией, которая генерирует постоянные ссылки, называемой the_permalink(). Остановитесь на секунду и подумайте, как она работает. Если вы не знаете, я объясню: когда мы вызываем эту функцию (обычно внутри цикла WP), выполняется множество операций для генерации URL.

Как работает the_permalink()?

Функция the_permalink() собирает ссылку в зависимости от того, какой тип постоянной ссылки установлен. Например, если установлен один из базовых типов:


/%year%/%monthnum%/%day%/%postname%/
  
то ссылки на статьи будут выглядеть так:  
```sourcecode language="plain"]
http://example.com/2010/10/27/post-name/


Когда вызывается функция the_permalink(), сначала извлекаются данные о типе постоянной ссылки, затем на основе этих данных определяется вся необходимая информация для генерации ссылки, и, наконец, выполняются операции по формированию ссылки. В этом примере используется глобальная переменная $post, которая содержит дату поста и его название (slug), и на основе этих данных собирается ссылка.

Хотя этот тип постоянных ссылок в целом не создает много нагрузки на сервер, все же некоторые процессы занимают время. Он оптимален, поскольку все данные находятся в переменной $post, которую функция может просто извлечь. Но что если структура постоянных ссылок включает плейсхолдеры %category%, %tag% или %author%? В таких случаях переменная $post не содержит всей необходимой информации для создания постоянной ссылки, и необходимо дополнительно запрашивать данные, которые хранятся в кэше. Например, категории (%category%) или теги (%tag%) будут собираться через таксономии.

Получение категории, в которой находится пост, и всех родительских категорий может быть медленным процессом. И представьте, если на странице будет 200-300 таких ссылок — это может вызывать значительную нагрузку на базу данных.

## Плейсхолдеры для постоянных ссылок

При просмотре основных настроек постоянных ссылок мы увидим, что нет никаких опций, в которых используются плейсхолдеры %category%, %tag% или %author%, и по умолчанию постоянные ссылки отключены.

Вот все плейсхолдеры, которые можно использовать для формирования постоянных ссылок в WordPress:

**Плейсхолдеры, которые доступны сразу и создают минимальную нагрузку:**

- %year% — год публикации поста. Например, 2004
- %monthnum% — месяц публикации поста. Например, 05
- %day% — день месяца. Например, 28
- %hour% — час публикации поста. Например, 15
- %minute% — минута. Например, 43
- %second% — секунда. Например, 33
- %postname% — название поста (slug). Например, post-title
- %post_id% — ID поста (уникальный — никогда не повторяется). Например, 423

**Плейсхолдеры, создающие увеличенную нагрузку:**

- %category% — названия категорий, в которых находится пост. Если у категории есть родительская категория, она также будет показана. Например, main_category/post_category.
- %tag% — имя тега поста. Например, post_tag
- %author% — имя автора поста. Например, author

Разработчики WordPress не рекомендуют использовать последние три плейсхолдера.

В конкретных числах можно сказать, что для генерации ссылки формата %category%/%postname% с отключенным кэшем выполняется 5 запросов к базе данных. Если кэш включен, то запросов не будет — данные извлекаются из кэша. Также следует помнить, что в процессе происходят дополнительные вычисления на PHP.

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

## Что делать?

Я предложил собственное решение этой проблемы во второй части статьи.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *