我有一个网站,上面有几篇帖子/文章,我可以在过去24小时,上周,上个月和每个帖子的所有时间浏览中跟踪。
我在db中的每个视图上保存时间戳。当有人打开主页时,我循环这些时间戳并相应地保存到最后24小时/上周/上个月/所有时间在数据库中。 这工作“很好”(但问题)。
现在出现问题:
如果我有5000个帖子怎么办? PHP脚本必须循环所有5000个帖子,并节省导致性能问题。该功能完成后,该站点不会立即显示。 我已经收到错误消息“允许的内存大小耗尽......”。
我该如何解决这个问题?有什么解决方案吗?
在打开主页以获取确切的计数器数据时运行此功能非常重要。
如果我只在帖子视图上执行此功能,那么仅针对此帖子,数据将不准确。想象一下,这个帖子已经好几天没有被查看了,计数器数据也不会被更新。
注意:这是一个Wordpress主题,在这种情况下不是很重要。
答案 0 :(得分:0)
你可以考虑使用WordPress的cron函数 wp_cron (here)
注意:与“真正的cron作业”不同,它依赖于对火的访问。
另外,请查看使用 Transients API 。瞬态会使性能大幅提升! (here)
简单来说,Transients API会缓存一个循环。因此,不是每次循环5000个帖子,它将循环一次然后设置一些数据。在后续加载时,它将获取缓存的数据。如果数据不存在或已过期,它将循环帖子以缓存新数据。
查看此伪代码
if ( false === ( $query = get_transient( 'query' ) ) ) {
// It wasn't there, so regenerate the data and save the transient
$query = new WP_Query( '//Your Loop Stuff' );
set_transient( 'query', $query );
}
$timestamps = $query->TIMESTAMP(or whatever you use);