存储每日帖子浏览量的最佳方式是什么?

时间:2017-08-15 作者:Peter Westerlund

我想追踪一篇文章每天的浏览量。这样我以后就可以从中得到各种有趣的趋势。例如,大多数访问持续三天。

但存储这些数据的最佳方式是什么?大多数关于谷歌搜索的教程都是关于存储总视图的。不是每天。如果我以同样的方式存储日视图,我可能只会进行如下元保存:

update_post_meta($post_id, "views_$year-$month-$day", $views + 1);
但我不确定当我想从数据库中获取不同类型的统计结果时,这是不是最好的方法?感觉会有很多不必要的大型数据库请求。WP post元数据用于其他类型的数据存储。

2 个回复
SO网友:Tom J Nowell

简单地说,you don\'t, 你不应该

这些问题使得数据非常不可靠,更新post-meta、options、terms等不是一个原子操作。您需要获取视图计数,向其中添加1,然后将其发送回数据库。

在此过程中,另一个页面加载也会发生同样的情况,导致以下情况:

用户1:get\\u post\\u meta 5

巨大的性能成本

数据库写入要比读取昂贵得多,而且该系统需要在每次页面加载时写入数据库。这将无法扩展,并且会带来严重的性能和速度问题。

那么我如何跟踪页面浏览量呢

外部服务和软件。这些类型的系统需要以特定的方式构建,以便在不超慢的情况下提供可靠的信息。这不是一项容易的任务。

因此,请使用第三方服务,并定期将该信息拉入。您可以在每次查看页面时发出一个新的请求,以获得100%准确的数据,但这会更慢,您无法缓存页面,加载时间可能会超过10秒,这对SEO和UX来说是可怕的。

在我自己的网站上,我每小时都会为前10个查看帖子、最近10个帖子和最近10个没有检查过的帖子收集谷歌分析数据(我会为上次检查的时间保存一个时间戳,并使用最旧的10个时间戳)

SO网友:Johansson

如果要在特定时间段内存储数据,可以使用Transients API. 但是,此API适用于少量数据,例如主题选项或类似数据。

您可以做的是,正常存储post视图,然后每天运行cron作业并清除视图。让我们看一个简单的例子。

// You update the view counts by using post meta
update_post_meta( $post_id, "view_count", $views + 1 );
// Now, let\'s run a task each day at 00:00 and clear these counts.
// If the cron is not scheduled, schedule it for 00:00 
if ( ! wp_next_scheduled( \'clear-post-counts\' ) ) {
  wp_schedule_event( strtotime( \'00:00:00\' ), \'daily\', \'clear-post-counts\' );
}
// Every time this action hook is triggered, the 
// callback function is run to clear the meta data
add_action(\'clear-post-counts\', \'clear_post_counts\');
function clear_post_counts(){
    // Get a list of all posts
    $posts = get_posts();
    // For each post, set the post views to 0
    foreach( $posts as $post ) {
        update_post_meta( $post->ID, "view_count", 0);
    }
}
该代码只是一个从何处开始的示例。您可以自定义它以满足您的特定需要。

结束

相关推荐

Blog statistics

我运行有3-5个用户的小型wordpress博客。人们一直在添加/编辑/删除和阅读内容。。。我想要的是能够看到一些统计数据。。。。哪些帖子/页面最受欢迎、更新最多、评论最多。。。哪些外部链接是点击次数最多的。。。等是否有插件(而非外部服务)来实现这一点?