Недавно мы хотели добавить функциональность, чтобы наши читатели могли комментировать статьи блога, которые мы публикуем на веб-сайте YGen. Обсудив доступные варианты, мы решили использовать Disqus, широко используемую платформу для добавления комментариев к любому блогу.

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

Моим первоначальным инстинктом было обвинить кэширование в неправильном подсчете, поскольку предыдущий отображаемый подсчет был точным. После некоторого расследования я подтвердил свои подозрения. Неточный подсчет комментариев раздражает, но что меня действительно беспокоит, так это тот факт, что когда я применяю фильтрацию (либо по тегу, либо по дате), количество комментариев становится непоследовательным. Я попадал в ситуации, когда количество комментариев к одной и той же статье было бы одним числом на главной странице блога и другим при фильтрации по дате.

Я обнаружил, что при использовании Disqus JavaScript для получения количества комментариев сначала анализируются элементы, которые будут отображать количество комментариев, а затем генерируется параметризованный URL-адрес для файла сценария — count-data.js. Вот откуда берется несогласованное количество комментариев. Этот файл кэшируется на серверах Disqus на основе полного URL-адреса, и, поскольку отображаемые предварительные просмотры статей различаются в зависимости от примененного фильтра, это приводит к двум разным подсчетам для одной и той же статьи.

Очистить этот кешированный файл было относительно просто, я решил добавить скрытый счетчик комментариев «фиктивной статьи», основанный на переменной, которая всегда будет разной — текущем времени. Пример реализации этого в синтаксисе ASP.NET Razor:

<span class="hidden disqus-comment-count" data-disqus-identifier="@DateTime.UtcNow.Ticks"></span>

В результате будет сгенерирован такой URL-адрес, как "count-data.js?1=636282175638532289&1=my-blog-article", и, поскольку этот URL-адрес никогда не будет одинаковым для двух запросов, он всегда будет давать постоянное количество комментариев. Конечно, это решение имеет небольшое снижение производительности, поскольку кэшированная версия этого файла больше не извлекается.

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

Первоначально опубликовано на ygen.ca.