Должно ли кэширование меню WordPress быть специфичным для каждой страницы?


Введение

При оптимизации больших веб-сайтов WordPress для повышения производительности я всегда обращаю внимание на кэширование определенных частей веб-сайта, в основном (конечно) тех, которые требуют большого количества запросов/вычислений.

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

Эта функция проверяет, существует ли переходный процесс, содержащий HTML-код меню, и, если он существует, доставляет HTML из переходного процесса. Если он не существует, меню строится и устанавливается переходный режим. Чтобы быть чистым, я также подключаюсь к wp_update_nav_menu, чтобы очистить переходный процесс, как только меню будет сохранено, чтобы всегда была доступна последняя версия.

Пока все идет хорошо.

Этот метод работает очень хорошо и дает большой прирост производительности, особенно если меню содержит много записей.

Проблема

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

Меню на разных страницах разные

В зависимости от того, какая страница называется, wp_nav_menu предоставляет различный HTML-код. current-menu-item и подобные классы, конечно, применяются к элементам меню.

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

Я думал о двух версиях

  • добавление классов с помощью jQuery, что приводит к большему вычислению на Клиентская сторона
  • кэширование меню для каждого ID отдельно, что приводит к довольно большой загрузке базы данных, если на странице много меню

Однако я склонен использовать второй вариант. У вас есть какие-либо проблемы с кэшированием такого количества HTML в качестве переходных элементов?

Author: Community, 2013-03-09

1 answers

Универсального решения этой проблемы не существует: одно и то же меню может отображаться с помощью разных ходоков на разных страницах, или плагины изменяют меню на некоторых страницах.

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

Я не думаю, что это стоит хлопот. правильное выполнение всех крайних случаев - тяжелая работа, и меню все равно будет отличаться для пользователей без JavaScript (поисковые системы, неразрешенные ошибки скрипта и т.д.).

 1
Author: fuxia, 2013-03-09 11:20:29