向博客应用程序添加选项,以显示 "more viewed" 个帖子

Add option to Blog App, to show "more viewed" posts

实际上,Blog post 是一个非常好的 2sxc 应用程序,但是每次用户打开博客时都能够注册,然后有一个模块可以显示例如 5 个以上,这应该很棒已查看 posts.

基本上我需要知道如何在用户每次打开或查看该字段的详细信息时更新 post 字段(例如视图)post

感谢您的帮助

这是一个有趣的想法 - 让我给你一些最基本的指导,让事情 运行 保持良好...

  1. 首先,我强烈建议您单独计算 item/entity。这是出于性能原因:当您更新博客-post 时,您正在更新 20-30 个字段,这只会给系统带来很多不必要的压力。所以用 属性 BlogPostIdCount
  2. 创建类似 ViewCount 的东西
  3. 现在更新计数,我建议你做两件事
    1. 获取计数并将其缓存在某处
    2. 更新每个视图的缓存计数
    3. 每点击或 100 次点击才更新服务器数据(只是为了性能,因为我假设您期望有很多观看次数)

这里有一些伪代码来做到这一点...

var postId = post.EntityId;
var cacheId = "PostCount" + postId;
var count = Application[cacheId] ?? -1;
if(count == -1) {
  // load the data
  var countStates = AsList(App.Data["ViewCount"]);
  var counter = countStates.FirstOrDefault(c => c.BlogPostId == postId);
  if(counter != null) {
    count = counter.Count;
  } else {
    count = 0;
  }
}

// increment
count++;

// save to cache
Application[cacheId] = count;

// every 10 counts update the count in the storage / sql
// on high load, increase this to 100 or 1000
if(count % 10 == 0) {
  // you'll have to figure this out yourself - see docs link below
  App.Data.Update(...);
}

为了省钱,请在此处查看文档 https://docs.2sxc.org/api/dot-net/ToSic.Eav.Apps.AppData.html#ToSic_Eav_Apps_AppData_Update_System_Int32_System_Collections_Generic_Dictionary_System_String_System_Object__System_String_