Подсчет просмотров страниц на кэшированных сайтах с высоким трафиком
Наш сайт имеет довольно высокий трафик, и мы используем как nginx, так и общий кэш w3 для обработки нагрузки. Ранее мы использовали wp-postviews для подсчета просмотров страниц, но, похоже, сейчас он блокирует таблицу postmeta и часто вообще не учитывает просмотры. Это в лучшем случае ненадежно.
Может ли кто-нибудь предложить нам способ подсчета просмотров страниц и внесения их в базу данных или какие-либо конкретные работоспособные решения?
Мои первоначальные мысли состоят в том, чтобы подсчитать количество просмотров с помощью javascript для обновления отдельной базы данных, затем задание cron в конце каждого дня для объединения результатов, но я не уверен, с чего начать.
Заранее благодарю
3 answers
Это действительно зависит от того, для чего вам нужно просматривать подсчеты - если это просто для просмотра статистики трафика, то используйте Google Analytics или любое количество аналитических инструментов на основе javascript-трекера.
Если вам нужна интеграция количества просмотров страниц и возможность делать такие вещи, как упорядочивать публикацию по представлениям, то вы можете либо
- потратьте некоторое время на оптимизацию своей базы данных - некоторые варианты и вещи, которые следует рассмотреть
- больше памяти для MySQL
- измените таблицу postmeta на InnoDB
- получить отдельный сервер базы данных
- убедитесь, что вы настроили настройки MySQL (используйте mysqltuner в качестве отправной точки)
ИЛИ
- Используйте что-то вроде Piwik и потратьте время на его интеграцию (у него приличный API) с WordPress.
Вот как вы это делаете, предполагая, что у вас активировано расширение кэширования памяти:
( Я собираюсь использовать 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 и т.д. Общие хостеры не позволят вам кэшировать данные в памяти по очевидным причинам...
Просто используйте Google Analytics или wp.com статистика.
Не стоит тратить время на то, что уже решено.