Всплывающая форма открывалась с заметной задержкой. Логичный ход — проверить кэш: может, форма не прогрета? Замер показал странное: из кэша и без кэша форма отвечала одинаково, около 180 миллисекунд.

Это восемнадцатая, заключительная часть цикла «Кэш фрагментов и Redis».

Где на самом деле время

Рендер формы — несколько миллисекунд. Почти все 180 мс — это вход в WordPress: загрузка ядра, плагинов, темы, ещё до того, как код дойдёт до кэша. Кэш блоков экономит рендер, а вход в WordPress он не экономит. Поэтому прогрев здесь задержку не лечит — лечит фронт.

Вывод для всей системы: кэш блоков делает тяжёлый блок быстрым, но лёгкий блок быстрее 150–200 мс он не сделает. Дальше выигрыш только на клиенте.

Что сделали на фронте

БылоСтало
скрипты попапа и формы грузятся по очередипараллельно, через Promise.all
запрос формы — после анимации открытия (410 мс)запрос стартует вместе с анимацией
лишняя пауза 200 мс перед показомубрана
каждое открытие — новый запроспромис формы запоминается до конца жизни вкладки
запрос по кликузапрос по намерению — при наведении или касании
const forms = new Map();

function loadForm(id) {
  if (!forms.has(id)) {
    forms.set(id, fetchForm(id));   // один запрос на вкладку
  }
  return forms.get(id);
}

document.querySelectorAll('[data-popup-form]').forEach((btn) => {
  const id = btn.dataset.popupForm;
  btn.addEventListener('pointerenter', () => loadForm(id), { once: true });
  btn.addEventListener('touchstart', () => loadForm(id), { once: true, passive: true });
});

Наведение или касание опережает клик на 300–800 мс — этого хватает, чтобы форма успела прийти до того, как её попросят показать.

Чего не делать

Не загружайте формы всем посетителям после загрузки страницы «на всякий случай». Это запрос к WordPress на каждый просмотр — тысячи ненужных входов в PHP ради тех немногих, кто откроет форму. Загрузка по намерению даёт ту же скорость без этой цены.

Чем заканчивается цикл

Мы прошли путь от «почему ajax-блокам нужен свой кэш» до Redis, сторожей и форм. Последняя часть — напоминание о границе: кэш убирает рендер, но не убирает вход в PHP. Где кончается выигрыш на сервере, начинается работа на клиенте.

Про кэш самих страниц — цикл «Кэш страниц без MISS», про скорость в браузере — «PageSpeed без мифов».

Всплывающие формы открываются с задержкой?

Пришлите адрес — найду, где теряются миллисекунды, на сервере или в браузере.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.