Подсчет просмотров страниц на кэшированных сайтах с высоким трафиком


Наш сайт имеет довольно высокий трафик, и мы используем как nginx, так и общий кэш w3 для обработки нагрузки. Ранее мы использовали wp-postviews для подсчета просмотров страниц, но, похоже, сейчас он блокирует таблицу postmeta и часто вообще не учитывает просмотры. Это в лучшем случае ненадежно.

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

Мои первоначальные мысли состоят в том, чтобы подсчитать количество просмотров с помощью javascript для обновления отдельной базы данных, затем задание cron в конце каждого дня для объединения результатов, но я не уверен, с чего начать.

Заранее благодарю

Author: James Bruce, 2011-07-08

3 answers

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

Если вам нужна интеграция количества просмотров страниц и возможность делать такие вещи, как упорядочивать публикацию по представлениям, то вы можете либо

  • потратьте некоторое время на оптимизацию своей базы данных - некоторые варианты и вещи, которые следует рассмотреть
    • больше памяти для MySQL
    • измените таблицу postmeta на InnoDB
    • получить отдельный сервер базы данных
    • убедитесь, что вы настроили настройки MySQL (используйте mysqltuner в качестве отправной точки)

ИЛИ

  • Используйте что-то вроде Piwik и потратьте время на его интеграцию (у него приличный API) с WordPress.
 1
Author: anu, 2011-07-08 10:39:29

Вот как вы это делаете, предполагая, что у вас активировано расширение кэширования памяти:

( Я собираюсь использовать APC в качестве примера здесь, потому что он будет поставляться в комплекте с PHP 6)

// set this to the current post id
$post_id = get_the_ID();

// this will attempt to get the post view count from cache (the memory)
$page_views = apc_fetch("post_{$post_id}_views");

// if it exists, increase the counter (again, only in memory)
if($page_views !== false){
  $page_views = apc_inc("post_{$post_id}_views");

  // write the data to the database every ...let's say 100 views
  if(($page_views % 10) == 100)
    update_your_database_here();
}

// doesn't exist; most likely this is the first view, so create the cache entry
else{
  apc_store("post_{$post_id}_views", 1);
  $page_views = 1;
}

// show it
printf('This post has %d views', $page_views);

Вы можете выбрать использование функций WP - wp_cache_incr() или wp_cache_decr() + W3TC с выбранным APC. Но лично я бы избегал использования каких-либо плагинов кэша и создал свой собственный обработчик кэша объектов, который я могу поместить в каталог wp-контента.

Вы также можете использовать xcache для этого тоже не имеет значения - идея в том, что вам нужно хранить счетчик в памяти до определенного момента, чтобы избежать записи на диск. Поскольку ваш сайт имеет высокий трафик, я предполагаю, что у вас есть выделенный сервер, на котором вы можете установить свои собственные расширения PHP и т.д. Общие хостеры не позволят вам кэшировать данные в памяти по очевидным причинам...

 2
Author: onetrickpony, 2011-12-08 22:40:26

Просто используйте Google Analytics или wp.com статистика.

Не стоит тратить время на то, что уже решено.

 -1
Author: scribu, 2011-07-08 09:24:07