一种社区帖子的发布方法和系统
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种社区帖子的发布方法和系统。
【背景技术】
随着互联网技术的不断发展,网络社区已经成为人们常用的信息发布、信息获取、信息交流、交友等的常用工具。所谓网络社区通常是指包括论坛、贴吧、公告栏、群组讨论、个人空间等形式在内的网络交流空间,特别是博客、微博等近年来兴起的网络社区形式,更加方便了用户进行信息分享、传播、管理和交流。
然而,现有诸如博客、微博等网络社区中,其发布网络帖子的方式决定了对于用户的帖子仅能够按照发布时间顺序进行展现,一方面展现形式死板不够灵活,另一方面也给用户回顾查询带来不便,效率十分低下。例如用户按照时间先后顺序依次在时间点1发布了帖子1,在时间点2发布了帖子2,此时如果用户想起了发生在时间点1和时间点2之间的一件事情,于是发布了帖子3,但该帖子3由于发布时间在时间点2之后,因此依旧按照发布时间进行排列展现。如果用户在发布了大量的帖子时候,想查询发生在时间点1和时间点2之间事情的帖子,但其发布时间却可能与事情发生的时间相差很远,用户通常无法记得具体的发布时间,系统需要逐个帖子展现给用户供用户进行逐个查询,这显然效率十分低下,且需要加载大量的数据,浪费系统资源。
【发明内容】
有鉴于此,本发明提供了一种社区帖子的发布方法和系统,以便于展现更加灵活,且在进行帖子查询时提高帖子查询效率,节约系统资源。
具体技术方案如下:
一种社区帖子的发布方法,该发布方法包括:
S1、监听到发布帖子的事件后,创建包含所发布帖子内容的feed节点;
S2、判断所述帖子的帖子时间所在时段的帖子块是否已经创建,如果是,执行步骤S3;否则,创建以所述帖子时间所在时段的帖子块后执行步骤S3;
S3、将所述feed节点插入到所述时段的帖子块中,针对所述feed节点保存帖子时间;
S4、将页面可视区域滑动到feed节点对应在时光轴页面上的视窗位置,以展示发布的所述帖子;
其中所述帖子时间为用户在发布帖子时额外指定的时间,或者,为所述帖子的发布时间。
根据本发明一优选实施例,在帖子块中各feed节点按照对应的帖子时间进行倒序排列;
将所述feed节点插入到所述时段的帖子块中为:采用DOM定位技术,根据帖子时间动态定位到所在时段的帖子块,并插入相应位置。
根据本发明一优选实施例,所述时光轴页面上包含标识有已创建帖子块的时段的时光轴,所述时光轴两侧展示已创建帖子块中各feed节点包含的帖子内容以及对应的帖子时间。
根据本发明一优选实施例,在步骤S3中插入所述feed节点时,将所述feed节点的帖子时间发送至后端进行排序,接收后端返回的排序结果,并依据该排序结果将所述feed节点插入到所述时段的帖子块中时光轴两侧的最短列。
根据本发明一优选实施例,该方法还包括:计数器对各帖子块进行帖子计数,具体地:
每插入一个feed节点就请求所述计数器更新帖子计数;或者,
将插入feed节点的数目保存在cache中,定时请求计数器依据cache中的数目更新帖子计数;或者,
采用定时脚本检查所述计数器对各帖子块的帖子计数与帖子块中的feed节点数目是否一致,如果不一致,则将计数器的帖子计数修改成和帖子块中的feed节点数目一致。
根据本发明一优选实施例,在用户刚进入时光轴页面时,仅加载并在页面可视区域显示帖子时间最晚的N1个帖子或者最晚的N2个时段的帖子块的帖子,所述N1和N2为预设的正整数。
根据本发明一优选实施例,在所述创建以所述帖子时间所在时段的帖子块后进一步包括:将创建的时段添加到时光轴页面的导航中;
如果监听到用户点击导航中具体时段的事件,则获取点击的具体时段,确定该具体时段对应的帖子块的feed节点,依据时光轴页面的页面可视区域大小从确定的feed节点中加载对应数目的帖子内容,将页面可视区域滑动至该具体时段对应的帖子块的视窗位置,并在页面可视区域显示加载的帖子内容。
根据本发明一优选实施例,帖子时间存储为feed节点的自定义属性;
所述确定该具体时段对应的帖子块的feed节点具体包括:遍历feed节点,将该具体时段与feed节点的自定义属性进行匹配,确定匹配得到的feed节点。
根据本发明一优选实施例,如果监听到用户在时光轴页面上滚动鼠标的事件,则确定鼠标滚动至的位置对应在时光轴上的具体时段,确定该具体时段对应的帖子块的feed节点,依据时光轴页面的页面可视区域大小从确定的feed节点中加载对应数目的帖子内容,并在页面可视区域显示加载的帖子内容。
一种社区帖子的发布系统,该发布系统包括:
事件监听单元,用于监听事件;
feed节点创建单元,用于在所述事件监听单元监听到发布帖子的事件后,创建包含所发布帖子内容的feed节点,并触发帖子块创建单元;
帖子块创建单元,用于受到触发后判断所述帖子的帖子时间所在时段的帖子块是否已经创建,如果是,触发feed节点插入单元,否则,创建以所述帖子时间所在时段的帖子块后触发feed节点插入单元;
feed节点插入单元,用于受到触发后将所述feed节点插入到所述时段的帖子块中,针对所述feed节点保存帖子时间;
页面展示单元,用于在所述feed节点插入单元完成所述feed节点的插入后,将页面可视区域滑动到feed节点对应在时光轴页面上的视窗位置,以展示发布的所述帖子;
其中所述帖子时间为用户在发布帖子时额外指定的时间,或者,为所述帖子的发布时间。
根据本发明一优选实施例,在帖子块中各feed节点按照对应的帖子时间进行倒序排列;
所述feed节点插入单元在将所述feed节点插入到所述时段的帖子块中时,采用DOM定位技术,根据帖子时间动态定位到所在时段的帖子块,并插入相应位置。
根据本发明一优选实施例,所述页面展示单元展示的时光轴页面上包含标识有已创建帖子块的时段的时光轴,所述时光轴两侧展示已创建帖子块中各feed节点包含的帖子内容以及对应的帖子时间。
根据本发明一优选实施例,所述feed节点插入单元在插入所述feed节点时,将所述feed节点的帖子时间发送至后端进行排序,接收后端返回的排序结果,并依据该排序结果将所述feed节点插入到所述时段的帖子块中时光轴两侧的最短列。
根据本发明一优选实施例,该发布系统还包括:计数器,用于对各帖子块进行帖子计数;
计数器请求单元,用于在所述feed节点插入单元每插入一个feed节点就请求所述计数器更新帖子计数;或者,将插入feed节点的数目保存在cache中,定时请求计数器依据cache中的数目更新帖子计数;或者,采用定时脚本检查所述计数器对各帖子块的帖子计数与帖子块中的feed节点数目是否一致,如果不一致,则将计数器的帖子计数修改成和帖子块中的feed节点数目一致。
根据本发明一优选实施例,所述页面展示单元在用户刚进入时光轴页面时,仅加载并在页面可视区域显示帖子时间最晚的N1个帖子或者最晚的N2个时段的帖子块的帖子,所述N1和N2为预设的正整数。
根据本发明一优选实施例,所述帖子块创建单元,还用于将创建的时段添加到时光轴页面的导航中;
该发布系统还包括:第一查询单元,用于在所述事件监听单元监听到用户点击导航中具体时段的事件时,获取点击的具体时段,确定该具体时段对应的帖子块的feed节点;
所述页面展示单元,还用于依据时光轴页面的页面可视区域大小从所述第一查询单元确定的feed节点中加载对应数目的帖子内容,将页面可视区域滑动至该具体时段对应的帖子块的视窗位置,并在页面可视区域显示加载的帖子内容。
根据本发明一优选实施例,所述feed节点插入单元将帖子时间存储为feed节点的自定义属性;
所述第一查询单元在确定具体时段对应的帖子块的feed节点时具体执行:遍历feed节点,将该具体时段与feed节点的自定义属性进行匹配,确定匹配得到的feed节点。
根据本发明一优选实施例,该发布系统还包括:
第二查询单元,用于在所述事件监听单元监听到用户在时光轴页面上滚动鼠标的事件时,确定鼠标滚动至的位置对应在时光轴上的具体时段,确定该具体时段对应的帖子块的feed节点;
所述页面展示单元,还用于依据时光轴页面的页面可视区域大小从所述第二查询单元确定的feed节点中加载对应数目的帖子内容,并在页面可视区域显示加载的帖子内容。
由以上技术方案可以看出,本发明提供的发布方法和系统创建帖子块,将包含帖子内容的feed节点按照帖子时间所在的时段插入相应的帖子块,如果用户针对发布的帖子指定了非发布时间之外的其他时间,也能够依据该指定的时间将帖子插入到已发布的帖子中间从而按照帖子时间进行排列和展示,也就是说能够实现依据用户的意愿实现帖子任意位置的插入,而不必死板地按照发布时间进行排列和展示,方式更加灵活,也为方便用户依据帖子时间进行帖子的回顾查询提供基础。例如当用户发布记载了某事情的帖子时,可以将帖子时间设置为事情的发生时间,这样用户后续在进行查询时,可以直接依据该事情的发生时间直接找到对应时段的帖子块进行回顾查询,从而提高了效率,且仅需要加载对应时段的帖子块中的feed节点,解决了系统资源。
【附图说明】
图1为本发明实施例一提供的社区帖子的发布方法流程图;
图2为本发明实施例一提供的时光轴页面中导航的示例图;
图3为本发明实施例一提供的瀑布流技术的展现示例图;
图4为本发明实施例二提供的社区帖子的发布系统的结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
实施例一、
图1为本发明实施例一提供的社区帖子的发布方法流程图,如图1所示,该方法主要包括以下步骤:
步骤101:监听到用户发布帖子的事件后,创建包含该帖子内容的feed节点。
在系统中存在事件监听的功能,一旦监听到用户发布帖子的事件,使用DOM(文档对象模型)动态创建feed节点,该feed节点包含帖子内容。
步骤102:判断该帖子的帖子时间所在时段的帖子块是否已经创建,如果是,执行步骤104;否则,执行步骤103。
如果用户在发布帖子时额外指定了帖子时间,则该帖子的帖子时间就是用户额外指定的帖子时间,如果用户在发布帖子时没有额外指定帖子时间,则该帖子的帖子时间就是帖子的发布时间。
本本发明实施例中涉及的帖子块实际上就是一定时段内帖子的集合,从结构上来说是DOM结构,体现在时光轴页面上一个帖子块所包含的帖子内容可以进行整合展示,当用户不点击该帖子块时也可以隐藏展示。时光轴页面指代本发明实施例中将帖子发布后展现在的页面,由于该页面上的帖子均以帖子时间进行排列,并用时段为标识的帖子块进行区分,通过帖子时间能够方便迅速地找到具体帖子时间的帖子,因此将其形象地称为时光轴页面。
步骤103:创建以该帖子时间所在时段的帖子块,执行步骤104。
包含帖子内容的feed节点均存储在帖子块中,每一个帖子块均对应一个时段,该时段的粒度可以进行设置,例如可以以年份来标识各时段、也可以以月份标识各时段,也可以以年份和月份结合来标识各时段,等等。帖子块中包含的是对应时段中包含的各feed节点。
在本步骤中还可以进一步包括将创建的时段添加到时光轴页面的导航中。
步骤104:将创建的feed节点插入到该时段的帖子块中,并针对该feed节点保存帖子时间。
在插入到帖子块中后,可以通过在帖子块中额外增加的字段保存该feed节点的帖子时间,该帖子时间可以作为feed节点的自定义属性。可以将各feed节点和对应的帖子时间采用post表的形式进行存储,以便将来进行回顾查询。
其中在帖子块中各feed节点按照对应的帖子时间进行排序,通常是按照时间倒序进行排列,在进行feed节点的插入时,采用了DOM定位技术,根据帖子时间动态定位到所在时段的帖子块,并插入相应位置。
优选地,在本步骤中可以采用瀑布流计算技术将feed节点插入到帖子块中的最短列。通常为了方便帖子展现,采用时光轴的方式,该时光轴上标识有已创建的帖子块的时段,时光轴的两侧均可以展示帖子块中各feed节点包含的帖子内容以及对应的帖子时间。为了节约页面资源,在插入当前feed节点时,可以将当前feed节点的帖子时间发送至后端进行排序,后端将排序结果以JSON结构的形式进行返回,然后找出当前帖子块展现在时光轴两侧的最短列,将当前feed节点插入最短列,如果两侧序列长度相同,则任意插入两侧中任一侧的序列。
更进一步地,可以采用计数器对各帖子块进行帖子计数,可以每插入一个feed节点就请求计数器更新该帖子计数,但这样会存在以下两个问题:
第一个问题:如果发帖量过大,会有大量修改帖子计数的请求,从而对计数器造成压力。针对该问题可以采用cache的方式,即将插入feed节点的数目保存在cache中,然后定时请求计数器依据cache中的数目更新帖子块的帖子计数。
第二个问题:可能会存在网络瞬间抖动等所带来的计数不准的问题。针对该问题可以采用定时脚本定时检查计数器对各帖子块的帖子计数与帖子块中的feed节点数目是否一致,如果不一致,则将计数器的帖子计数修改成和帖子块中的feed节点数目一致,从而实现自动修复。
步骤105:将页面可视区域滑动到feed节点对应在时光轴页面上的视窗位置,以展示发布的该帖子。
通常在用户进入时光轴页面时,可以默认仅加载并在页面可视区域显示帖子时间最晚的N1个帖子、或者最晚的N2个时段的帖子块的帖子。其中N1和N2为预设的正整数。这样请求的数据量是很少的,保证了用户首次进入时光轴页面的速度是最优的。
当用户通过诸如发布框或者指定的发布区域或发布页面发布帖子后,执行上述步骤101至步骤104之后,页面可视区域自动以动画的效果滑动定位到当前发布的帖子,即滑动到时光轴中当前发布的帖子对应的帖子时间处。
以上是对用户发布帖子后执行的流程进行的描述,下面针对上述流程举一个实例,假设用户当前发布了帖子5,虽然该帖子5的发布时间是当前时间,假设是2012-10-23,但用户指定了帖子5的帖子时间为2012-9-20。监听到用户发布该帖子5的事件后,创建包含该帖子5内容的feed节点。假设本例子中各时间块的时段以年份和月份的结合进行标识,如果当前不存在2012年9月的帖子块,则创建该帖子块采用2012年9月进行标识,并将该2012年9月添加到页面的导航中,如图2所示,该帖子5发布前的导航如图2中(a)所示,发布后的导航如图2中(b)所示。该导航可以在时光轴页面的固定区域进行显示,例如显示在时光轴页面的右上角。如果已经存在2012年9月的帖子块,则直接将创建的feed节点插入到以2012年9月为标识的帖子块中,并针对该feed节点保存帖子时间2012-9-20。在插入帖子块中时,采用瀑布流技术判断该帖子块展现在时光轴两侧的最短列,假设发布该帖子5之前该帖子块展现在时光轴两侧的状况如图3中(a)所示,则发布该帖子5之后该帖子块展现在时光轴两侧的状况如图3中(b)所示。然后将页面可视区域滑动到feed节点对应在时光轴页面上的展示区域,以显示发布的该帖子。
基于上述帖子的发布方法,用户要回顾查询某个帖子时通常可以采用但不限于以下两种方式:点击导航中具体时段的方式,或者在时光轴页面上滚动鼠标的方式。
如果采用点击导航中具体时段的方式,即如果监听到用户点击导航中具体时段的事件,则获取用户点击导航中的具体时段,确定该具体时段对应的帖子块包含的feed节点,依据时光轴页面的页面可视区域大小加载该帖子块中对应数目的feed节点包含的帖子内容,并采用DOM操作滚动条的方式将页面可视区域滑动至具体时段对应的帖子块对应的视窗位置,并在页面可视区域显示加载的帖子内容。其中加载的帖子内容可以采用时间倒序的方式进行选取并加载。例如,当用户点击导航中2012年9月时,首先确定2012年9月对应的帖子块,假设时光轴页面的页面可视区域大小能够清楚地显示该帖子块中最晚的10个帖子内容,则可以采用异步加载技术加载该帖子块中帖子时间最晚的10个feed节点包含的帖子内容,并采用瀑布流技术分别展现在时光轴页面上时光轴的两侧。这样用户不需要浏览过多数据的时候,就减少了请求量和数据量而不是一次性的全部展现出来。
其中在确定具体时段对应的帖子块包含的feed节点时,实际上是遍历feed节点,将该具体时段与feed节点的自定义属性进行匹配,确定匹配得到的feed节点。
如果采用在时光轴页面上滚动鼠标的方式,即如果监听到用户在时光轴页面上滚动鼠标的事件,则确定鼠标滚动至的位置对应在时光轴上的具体时段,确定该具体时段对应的帖子块包含的feed节点,依据时光轴页面的页面可视区域大小加载该帖子块中对应数目的feed节点包含的帖子内容,并在页面可视区域显示加载的帖子内容。其中加载的帖子内容可以采用时间倒序的方式进行选取并加载。
需要说明的是,上述两种方式在实际应用中可能会交替使用,例如用户首先通过点击导航中具体时段,待页面可视窗口滑动到具体时段对应的帖子块后,又采用滑动鼠标的方式滑动到具体的帖子;或者用户首先通过滑动的方式进行查询和浏览,但发现一时找不到想浏览的具体帖子,又采用点击导航中具体时段的方式。
以上是对本发明所提供的方法进行的详细描述,下面通过实施例二对本发明提供的系统进行详细描述。
实施例二、
图4为本发明实施例二提供的发布系统的结构图,如图4所示,该系统可以包括:事件监听单元400、feed节点创建单元401、帖子块创建单元402、feed节点插入单元403和页面展示单元404。
事件监听单元400,用于监听事件。
feed节点创建单元401,用于在事件监听单元400监听到发布帖子的事件后,创建包含所发布帖子内容的feed节点,并触发帖子块创建单元402。
帖子块创建单元402,用于受到触发后判断帖子的帖子时间所在时段的帖子块是否已经创建,如果是,触发feed节点插入单元403,否则,创建以帖子时间所在时段的帖子块后触发feed节点插入单元403。
其中上述帖子时间为用户在发布帖子时额外指定的时间,或者,为帖子的发布时间。
包含帖子内容的feed节点均存储在帖子块中,每一个帖子块均对应一个时段,该时段的粒度可以进行设置,例如可以以年份来标识各时段、也可以以月份标识各时段,也可以以年份和月份结合来标识各时段,等等。
另外,帖子块创建单元402创建完以帖子时间所在时段的帖子块后,将创建的时段添加到时光轴页面的导航中。
feed节点插入单元403,用于受到触发后将feed节点插入到时段的帖子块中,针对feed节点保存帖子时间。可以通过在帖子块中额外增加的字段中保存该feed节点的帖子时间,该帖子时间可以作为feed节点的自定义属性。可以将各feed节点和对应的帖子时间采用post表的形式进行存储,以便将来进行查询。
作为一种优选的实施方式,在帖子块中各feed节点按照对应的帖子时间进行倒序排列,feed节点插入单元403在将feed节点插入到时段的帖子块中时,可以采用DOM定位技术,根据帖子时间动态定位到所在时段的帖子块,并插入相应位置。
页面展示单元404,用于在feed节点插入单元403完成feed节点的插入后,将页面可视区域滑动到feed节点对应在时光轴页面上的视窗位置,以展示发布的帖子。
在本发明实施例中页面展示单元404展示的时光轴页面上包含标识有已创建帖子块的时段的时光轴,时光轴两侧展示已创建帖子块中各feed节点包含的帖子内容以及对应的帖子时间。
优选地,feed节点插入单元在插入feed节点时,可以采用瀑布流技术,具体为:将feed节点的帖子时间发送至后端进行排序,接收后端返回的排序结果,并依据该排序结果将feed节点插入到时段的帖子块中时光轴两侧的最短列。
更进一步地,该发布系统还可以包括:计数器405,用于对各帖子块进行帖子计数。
计数器请求单元406,用于在feed节点插入单元403每插入一个feed节点就请求计数器更新帖子计数;或者,将插入feed节点的数目保存在cache中,定时请求计数器依据cache中的数目更新帖子计数;或者,采用定时脚本检查计数器对各帖子块的帖子计数与帖子块中的feed节点数目是否一致,如果不一致,则将计数器的帖子计数修改成和帖子块中的feed节点数目一致。其中第二种方式可以解决发帖量过大对计数器造成的压力过大问题,第三种方式可以解决因网络瞬间抖动所带来的计数不准的问题。
为了保证用户首次进入时光轴页面的速度是最优的,页面展示单元404在用户刚进入时光轴页面时,仅加载并在页面可视区域显示帖子时间最晚的N1个帖子或者最晚的N2个时段的帖子块的帖子,N1和N2为预设的正整数。
基于该发布系统可以方便高效地实现帖子的回顾查询,下面对回顾查询的两种方式进行分别描述:
第一种方式:用户点击导航中具体时段的方式。此时,该发布系统还可以包括:第一查询单元407,用于在事件监听单元400监听到用户点击导航中具体时段的事件时,获取点击的具体时段,确定该具体时段对应的帖子块的feed节点。具体地,确定时段对应的帖子块的feed节点的方式可以为:遍历feed节点,将该具体时段与feed节点的自定义属性进行匹配,确定匹配得到的feed节点。
页面展示单元404依据时光轴页面的页面可视区域大小从第一查询单元407确定的feed节点中加载对应数目的帖子内容,将页面可视区域滑动至该具体时段对应的帖子块的视窗位置,并在页面可视区域显示加载的帖子内容。
第二种方式:用户在时光轴页面上滚动鼠标的方式,此时该发布系统还包括:第二查询单元408,用于在事件监听单元400监听到用户在时光轴页面上滚动鼠标的事件时,确定鼠标滚动至的位置对应在时光轴上的具体时段,确定该具体时段对应的帖子块的feed节点。
页面展示单元404依据时光轴页面的页面可视区域大小从第二查询单元408确定的feed节点中加载对应数目的帖子内容,并在页面可视区域显示加载的帖子内容。
上述两种方式可能择一使用,也可能会交替使用,因此在发布系统中可能仅包含第一查询单元407或第二查询单元408中的一种,也可能会同时包含第一查询单元407和第二查询单元408(图4中显示的是该种情况)。
由以上描述可以看出,本发明提供的上述方法和系统具备以下优点:
1)可以将用户指定的时间作为发布帖子的帖子时间,实现帖子依据帖子时间插入所在时段的帖子块,也就是说能够实现依据用户的意愿实现帖子任意位置的插入,而不必死板的按照发布时间进行排列和展示,方式更加灵活,也为方便用户依据帖子时间进行帖子的回顾查询提供基础。
2)用户在回顾查询帖子时可以依据当时指定的帖子时间直接找到对应时段的帖子块,从而提高了效率,且仅需要加载对应时段的帖子块中的feed节点,解决了系统资源。
3)在用户回顾查询帖子的时候采用了懒加载技术,仅加载可视区域的帖子内容,从而在性能上和资源优化上都达到较好的效果。
4)在插入feed节点至帖子块时采用了瀑布流技术,提高了页面资源的利用率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。