ГлавнаяПлагиныPageviews: простой счетчик просмотров для WordPress

Pageviews: простой счетчик просмотров для WordPress

Если вам требуется выводить количество просмотров ваших статей на сайте WordPress, то новый плагин Pageviews прекрасно с этим справится — он основан на JavaScript, поддерживает все плагины кэширования и эффективно работает даже на сайтах с высокой посещаемостью.

Счетчик просмотров для WordPress

Счетчик просмотров для WordPress

Pageviews это далеко не первый плагин, реализующий подсчет и вывод количества просмотров статей в WordPress. Долгое время уже существуют плагины WP-PostViews, Post View Counter и многие другие, но у этих аналогов есть одна (не всегда очевидная) проблема — производительность.

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

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

Плагин Pageviews

Сам по себе плагин Pageviews очень легкий и простой. Он лишь выводит асинхронный JavaScript код в требуемых местах, для подсчета и вывода количества просмотров.

Пример работы плагина Pageviews

Пример работы плагина Pageviews

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

Изменение внешнего вида и расположения счетчика

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

Для этого необходимо лишь объявить о поддержке плагина в файле functions.php вашей темы:

add_action( 'after_setup_theme', function() {
    add_theme_support( 'pageviews' );
});

Это отключит стандартный функционал вывода счетчика в конце каждой статьи, а добавить его в произвольное место можно при помощи простого события в любом шаблоне вашей темы, например single.php:

Просмотров: <?php do_action( 'pageviews' ); ?>

В репозитории GitHub этого плагина есть более подробная инструкция для разработчиков.

Импорт, популярные записи и многое другое

Разработчики Pageviews планируют создать расширения для плагина, которые позволят импортировать или синхронизировать статистику с другими сервисами, включая Jetpack Stats, Google Analytics и Яндекс.Метрику. Также в планах дать пользователям возможность выводить популярные записи на основе собранной статистики, живое обновление и другие функции.

Плагин Pageviews распространяется бесплатно под лицензией GPL. Установить его можно из панели администрирования WordPress в разделе Плагины → Добавить, или скачав свежий дистрибутив из директории плагинов на WordPress.org.

За помощью в установке и конфигурации обращайтесь на форумы поддержки WordPress.org, а если вам понравился плагин (или не понравился), то не забудьте оставить свой рейтинг в директории.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • Я использую шаблон Semicolon. Как можно «прикрутить» счётчик как и у вас? Банальная вставка кода отображает лишь цифру, без применения стилей. :-(

    • Вы можете дождаться очередного обновления темы Semicolon, где мы внедрили поддержку для этого плагина, или внедрить самостоятельно по нашему примеру.

      • Спасибо!

      • Vasilii

        Когда обновление?

        • Постараемся в этом месяце выпустить обновление, есть еще пара багов, которые хотелось бы исправить.

  • matsiden

    и по словам разработчиков вся архитектура способна выдерживать миллионы запросов в сутки

    это пока неизвестно, выдержит или нет. Потому 2 вопроса:

    1) Чем оно лучше JetPack Stats?

    2) Чем оно лучше Google Analytics?

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

    • Цель этого плагина – собирать и отображать количество просмотров. Да, Jetpack, Google Analytics и прочие системы аналитики безупречно собирают количество просмотров и многое другое, но вот с отображением у них все сложно.

      В Jetpack, GA и Яндекс.Метрике можно подключиться к API и внешними HTTP запросами собирать количество просмотров для отображения в WordPress, но вам придется кэшировать полученные данные, особенно при высокой посещаемости и большом количестве записей, т.к. каждый внешний HTTP запрос будет замедлять выполнение PHP скриптов, плюс у API есть определенные лимиты, которые необходимо соблюдать. Можно делать это фоновыми запросами, можно cron-задачами, в любом случае придется немного поморочиться.

      Иными словами, если вам нужна аналитика, то Jetpack Stats, Google Analytics или прочие сервисы вам определенно пригодятся. А если вам хочется всего лишь отобразить количество просмотров ваших записей, то Pageviews хорошо с этим справится. Одно другому не помешает :)

      • matsiden

        Спасибо за развёрнутый ответ. Вот только я не очень понял, как http-запрос замедляет исполнение php, это ведь нагрузка на браузер клиента. А по JetPack функция stats_get_csv() вроде как отдаёт результат из кеша (но тут не уверен, может англ неверно понял)

        • Если вы хотите получать количество просмотров страниц в GA/YM и т.д., то HTTP запросы на API происходят на стороне сервера, а не в браузере клиента, т.к. они содержат данные для аутентификации.

          В Jetpack действительно функция stats_get_csv() кэширует некоторые запросы на 300 секунд, плюс кэш страниц поверху встанет, но при большом количестве записей у вас все равно будет много промахов, и соответственно HTTP запросов с сервера, а опция stats_cache будет постоянно расти и съедать память при каждом запросе. Если уж и делать вывод на основе статистики Jetpack, то кэшировать лучше в мета-данные записей, а собирать фоновыми процессами по расписанию.

  • matsiden

    Раз вы тут на связи, не могли бы вы объяснить вот этот момент

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

    Вот этот момент поподробнее можно обсудить? В целом механизм выглядит как: пользователь загрузил страницу -> счётчик , который работает на ajax, сделал запрос в бекенд вордпресс -> тот его принял и записал данные в кеш/бд -> плюс увеличил счётчик просмотров +1. Я правильно описал механику? Если да, то на каком этапе происходит загрузка окружения ядра WP и плагинов? И как этого можно избежать или хотя бы минимизировать нагрузку?

    • Если речь о плагине Pageviews, то как упомянуто в статье, AJAX запрос идет на внешний сервис, а не в WordPress, поэтому он быстрее и никакой нагрузки на сам сайт не создает.

      Если же вы спрашиваете про плагин WP-PostViews и другие, то в большинстве случаев, когда вы включаете режим JavaScript/AJAX (для совместимости с плагинами кэширования страниц), то запросы идут на admin-ajax.php, и чтобы ответить на подобный запрос, WordPress должен загрузить все требуемые файлы ядра, файлы темы и плагинов, чтобы найти тот обработчик, который должен ответить на определенное событие.

      Сам по себе этот механизм неплохой, но когда admin-ajax.php обрабатывает загрузку всех плагинов, некоторые из них могут выполнять какие-нибудь «глупые» действия, например платные плагины любят проверять валидность лицензионного ключа на событии admin_init, и здесь уже начинаются серьезные проблемы.

      Избежать это можно не загружая окружение WordPress для обработки подобных запросов, или загружать его в «легком» режиме при помощи SHORTINIT для доступа к БД и т.д., хотя с высокой посещаемостью даже это будет съедать слишком много ресурсов.

      То есть AJAX запрос должен идти на ваш собственный PHP (или не PHP) файл. Также учтите, что у некоторых хостинг-провайдеров исполнение файлов напрямую из директории wp-content запрещена. Лайфхакер начали недавно использовать подобный подход (прямые запросы на plugins/lh-views/fetch.php) и по всей видимости неплохо справляются.

      • matsiden

        Спасибо за развёрнутый ответ, однозначно пригодится в будущем! С лайфхакером прям в точку попали, давно думал, как они решали вопрос насчёт просмотров. Но думалось, что целиком положились на JetPack Stats

  • Vasilii

    Класс! Тока на днях увидал у вас на сайте эту «фичу» и искал как это сделать!

  • Лаурент

    Что-то меня в этом плагине сильно напрягает два момента (и думаю не зря):
    1 — Данные утекают на какой то сторонний сервис!!!!!
    2 — Одним из авторов является сам Геннадий Ковшенин — любитель хакинга и «поисков» уязвимости! ))))

    • 1. Данные GA, YM, Jetpack тоже утекают на сторонний сервис. Вы можете посмотреть какие данные утекают в AJAX запросах, ничего секретного там нет.
      2. Это работа командная, весь исходный код открытый на GitHub. Найдете уязвимость — сообщите о ней! :)

      • Владимир Петрозаводский

        А серверная часть тоже на гитхабе и можно себе такую балалайку поднять ?

        • Пока нет, но возможно в будущем появится.

  • Dmitriy Dementiy

    Добрый день. Подскажите, а зачем выводить количество просмотров? Данные можно посмотреть в «Метрике». А пользователям зачем их показывать? Не могу понять практического смысла.

    • Затем же, что и количество лайков, репостов, твитов, комментариев, плюсов и прочих счетчиков, наверное :)

      • Dmitriy Dementiy

        Ага, интересно, надо подумать.

  • У этого плагина есть возможность устанавливать показатель счётчика вручную? Например, это крайне полезно для записей, опубликованных до установки счётчика.

    • Пока что нет, но в скором времени возможность появится синхронизации с ЯМ, GA, JP точно. А пока с нуля.