开发总结 - H5/web C端评论区开发逻辑

news2024/11/15 11:37:59

1. 背景

平时做的系统都是偏公司业务的系统,这次开发了一个用户评论的功能,同时开发了web版和H5版本的,因为没有做过这种C端的常用的功能,所以记录一下此次的开发,从参考友商设计到独立思考业务之间的区别再到实际开发,最后再优化细节,还是学到了很多东西。

2. 设计

不方便截图内部系统,所以开发的功能UI就可以参考小红书的帖子,最上面是内容,下面是评论区。

评论区每条评论包括用户头像,用户名、评论内容、评论时间、点赞按钮、回复按钮。同时针对该条评论如果有其他用户来评论了这条评论,那么在每一条评论下面有一个“展开xx条回复”的按钮。点击之后展开更多的回复,回复的评论的结构也和上面的评论结构一样。

3. 区别

首先小红书的定位是一款互动交流的平台,我们开发的是一个查看资讯的页面。两种不同的平台有如下区别:

1)定位:

        小红书侧重于用户侧分享,更注重用户体验和社区互动;

        资讯网主要用于用户获取新闻、行业动态、公司信息等,不太强调社区互动;

2)使用场景:

        小红书适合用户学习技能、寻找志同道合的人,总之,主打一个交友互动;

        资讯网主要适合获取最新消息,深入某个特定的领域资讯。比如我们这个资讯网就是主打获取公司内部某个方面的资讯。

总之大概区别大家可以想象是小红书和腾讯新闻的区别。

4. 相同

按道理来说像资讯网这种在评论的交互方面可能不需要支持太多功能,大多仅限于用户评论、分享资讯、点赞资讯就可以了。但是产品又不想把该平台打造成太严肃的资讯发布平台,想要多一代呢用户之间的互动,所以我们也像小红书一样支持用户之间的互相评论,支持点赞评论等。

5. 细节实现

如上图所示,评论分几种情况:

1)当评论没有回复时,就直接显示就可以;

2)当评论有一条回复时,要显示在该条评论之下;

3)当评论有多条回复时,要默认显示一条回复在最上面,小红书按照的排序是热度最高的评论放在最上面。按时间还是按热度就由产品自己来定了。

更多的一些开发细节,也是在开发过程中发现的。

首先说明一下我们定义了获取资讯详情接口、获取评论接口、点赞接口、发布评论接口四个接口。

1)资讯点赞时需不需要重新调获取资讯详情接口?

        — 不需要, 这会导致页面重新渲染,浪费性能,用户体验不好;直接用户点赞后,点赞接口成功执行成功后,前端自己手动将资讯点赞数量加一

2)H5或者web都需要实现评论翻页。万一评论有几千条一次性加载出来肯定不现实,所以我们的做法时下拉到最底部后再调接口加载更多,当然针对评论的回复就是点击“展开xxx条回复”来加载,当加载的page数等于来totalPage后,那么就需要隐藏“展开xxx条回复”按钮

3)基于第二条,我们又思考了一个问题,假如有多个用户在这个资讯评论了,如果我们下拉后加载评论接口,需不需要将其他用户的评论也加载出来。意思就是假如A和B在11:00同时进入了这个资讯,然后A评论了一条,那么B往下拉加载的时候需不需要将刚刚A的评论也加载出来,也就是我们能不能看见11:00之后的其他用户的评论?

        — 经过思考,我们系统的定位不是像qq微信这种实时的聊天工具,所以是不需要的,经过小红书验证,小红书也是不会加载新的评论的。所以解决方法就是在接口加一个参数,加一个进入页面的时间参数,这样接口每次都只返回在这个时间点之前的评论,就不会导致上面的问题。

4)评论被点赞后需不需要重新调获取资讯评论接口?

        — 不需要,这就更加没必要了,想象下如果此时我们已经下拉查看了几百条几千条,只为了一个点赞就重新加载几百条,性能肯定不好,而且在调接口的逻辑方面不好控制。

5)同样,评论之后需不需要重新调获取评论接口?

        — 不需要,我们的做法也是在接口返回成功后,需要接口将这条评论的信息都返回给我们,比如时间啊,评论人姓名啊之类的,然后前端手动将这条评论推到评论列表。如果是评论的回复的话,那么默认推到评论的回复的第一条,如果是评论的回复的回复,就是A下面有个评论B,C又对B进行回复,那么要将这条回复手动插入到B这条评论后面第一条。在重新进入页面后,这些所有评论就按照时间或者热度排序就行。

6. 总结

总的来说,这次开发逻辑和平时的开发不太一样,平时的开发在更新列表后是需要实时调接口刷新的,而这次的是手动插入列表里面,其实呢代码实现难度不难,就是要理清评论的交互逻辑,这对第一次开发这类需要的我还是需要好好思考的。以后再遇到这类评论的功能就手拿把掐了,哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

everything搜索不到任何文件-设置

版本: V1.4.1.1024 (x64) 问题:搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含

2024 辽宁省大学数学建模竞赛B 题 钢铁产品质量优化完整思路 代码 结果分享(仅供学习)

冷轧带钢是钢铁企业的高附加值产品,其产品质量稳定性对于钢铁企业的经济效益具有非常重要的影响。在实际生产中,冷连轧之后的带钢需要经过连续退火处理来消除因冷轧产生的内应力并提高其机械性能。连续退火的工艺流程如图1 所示,一般包括加热、保温、缓冷…

Datawhale AI 夏令营 Task1

记录第一次参加Kaggle上的比赛,通过一站式的教程,没有一点阻碍的跑通了baseline 夏令营方向的选择 我选择的夏令营是关于CV方向的,因为本身对于cv方向比较感兴趣,而且这次夏令营的方式我很喜欢,通过比赛来促进学习&a…

板级调试小助手(5)基于Python访问千帆大模型

一、前言 千帆大模型是百度提供的可以使用API接口调用GPT模型,使用Python调用其实是很简单的:去千帆大模型申请账号->使用python调用API即可,具体可以参考这位大佬的博客,这里就不赘述了。 【教程】如何用Python调用百度的千帆…

基于Java+SpringMvc+Vue技术的药品进销存仓库管理系统设计与实现系统(源码+LW+部署讲解)

注:每个学校每个老师对论文的格式要求不一样,故本论文只供参考,本论文页数达到60页以上,字数在6000及以上。 基于JavaSpringMvcVue技术的在线学习交流平台设计与实现 目录 第一章 绪论 1.1 研究背景 1.2 研究现状 1.3 研究内容…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术,它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题,这些问题的解决方式具有自相似性。在数据结构和算法中,递归是一种重要的解决问题的方法,尤其是…

项目范围管理-系统架构师(二十九)

1、(重点)软件设计包括了四个独立又相互联系的活动,高质量的()将改善程序结构的模块划分,降低过程复杂度。 A程序设计 B数据设计 C算法设计 D过程设计 解析: 软件设计包含四个,…

Golang | Leetcode Golang题解之第232题用栈实现队列

题目: 题解: type MyQueue struct {inStack, outStack []int }func Constructor() MyQueue {return MyQueue{} }func (q *MyQueue) Push(x int) {q.inStack append(q.inStack, x) }func (q *MyQueue) in2out() {for len(q.inStack) > 0 {q.outStack…

Linux权限相关

目录 Linux中的用户 Linux权限管理 Linux的文件访问者分类 Linux的文件类型和访问权限 文件类型 文件权限 文件权限的修改 文件所有者修改 文件所有者所在组修改 目录权限 粘滞位 文件掩码 在Linux中,权限包括用户的权限和文件的权限 Linux中的用户 在…

Android 儿童绘本/汉语拼音实现

有这样一个项目&#xff0c;开发一个电子绘本&#xff0c;需要在绘本上显示&#xff0c;汉语拼音。 界面布局 <androidx.core.widget.NestedScrollViewandroid:layout_width"match_parent"android:layout_height"match_parent"android:fillViewport&quo…

路径规划 | 飞蛾扑火算法求解二维栅格路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 飞蛾扑火算法求解二维栅格路径规划&#xff08;Matlab&#xff09;。 飞蛾扑火算法&#xff08;Firefly Algorithm&#xff09;是一种基于自然界萤火虫行为的优化算法&#xff0c;在路径规划问题中也可以应…

C++·多态

1. 多态的概念 多态通俗讲就是多种形态&#xff0c;就是指去完成某个行为&#xff0c;当不同对象去做时会产生不同的结果或状态。 比如买火车票这个行为&#xff0c;同样是买票的行为&#xff0c;普通成年人买到全价票&#xff0c;学生买到半价票&#xff0c;军人优先买票。这个…

Qt MV架构-视图类

一、基本概念 在MV架构中&#xff0c;视图包含了模型中的数据项&#xff0c;并将它们呈现给用户。数据项的表示方法&#xff0c;可能和数据项在存储时用的数据结构完全不同。 这种内容与表现分离之所以能够实现&#xff0c;是因为使用了 QAbstractItemModel提供的一个标准模…

Go语言---TCP服务端以及客服端的实现

TCP的C/S架构 TCP服务器的实现 监听的底层实现 func Listen(network, address string) (Listener, error) {var lc ListenConfigreturn lc.Listen(context.Background(), network, address) }type Listener interface {// Accept waits for and returns the next connection …

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

【深度学习入门篇 ⑤ 】PyTorch网络模型创建

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

注册中心与配置中心,是分?是合?

一零年代初&#xff0c;我还自己动手写过socket连接来做服务注册发现&#xff0c;后来有了zookeeper就方便多了&#xff0c;那时候zookeeper也直接做配置中心使用。后来出现了一些专门的服务注册发现组件如Eureka\etcd\consul&#xff0c;专门的配置中心比如spring cloud confi…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(2)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;2&#xff09; 第21题&#xff1a;在一个大型信息系统项目中&#xff0c;项目经理发现尽管已经建立了沟通机制&#xff0c;但团队间的沟通依然不畅&#xff0c;项目风险…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…

C++基础语法:STL之迭代器

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 C基础:STL概述-CSDN博客 上一篇梳理了一些同STL有关的概念.同时对理解迭代器需要的类包含,内部类,链表等内容做了分析,这篇从<C Prime Plus> 6th Edition(以下称"本书")的P684,大标题16.4泛型编…