V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iyangyuan
V2EX  ›  问与答

请教下 V2EX 的 Block 功能设计思路

  •  
  •   iyangyuan · 2018-05-22 11:33:07 +08:00 · 2463 次点击
    这是一个创建于 2403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前来看,已经实现屏蔽用户、主题、甚至是评论。

    这个功能看起来简单,实际上大大增加了查询复杂度,直接硬写 SQL 应该不是最佳实践。

    所以想请教一下大家,有没有什么比较好的设计思路?

    PS:这个问题应该是一类问题,好多系统在设计的时候都有可见性的需求,虽然形式不同,但都是这类交集差集的问题。

    8 条回复    2018-05-23 11:25:33 +08:00
    huiyifyj
        1
    huiyifyj  
       2018-05-22 11:35:24 +08:00 via Android   ❤️ 1
    v2 以前版本有开源的,就是不知道那个版本有没有 block 功能。
    kera0a
        2
    kera0a  
       2018-05-22 11:48:09 +08:00   ❤️ 1
    做了个简单的验证,
    全部 tab 下首页是 48 条数据,block 一位后,刷新首页变成了 47 条
    所以查询应该是不带 block 条件的

    接下来只是 48 条数据中,排除 block 掉的数据,这一步可以知道是很快的。

    然后应该还有一些措施,防止 Block 数据过多时的额外处理
    iyangyuan
        3
    iyangyuan  
    OP
       2018-05-22 11:53:18 +08:00
    @kera0a Block 数据过多,最容易想到的方法就是用后边的数据补充,但是这样做带来的后果是打乱了分页,必须为每个用户单独维护分页偏移量,否则下一页会看到重复的数据,真是纠结呀~
    kera0a
        4
    kera0a  
       2018-05-22 12:00:06 +08:00
    @iyangyuan
    页码分页就算不排除 block 数据,也得出现重复呀。
    旧数据顶到前面,必然有数据后移。
    据我观察 V2EX 重复就很多
    kera0a
        5
    kera0a  
       2018-05-22 12:02:08 +08:00
    @iyangyuan 如果数据顺序不变,
    翻页维护偏移量 不如简单的根据上一页最后一条数据数据确定下一页第一条数据
    mywaiting
        6
    mywaiting  
       2018-05-22 12:07:43 +08:00   ❤️ 3
    你仔细看看页面的 JS 不就知道了么?

    <script type="text/javascript">
    blocked = [];
    ignored_topics = [];
    $("#TopicsHot").children('.cell').each( function(index) {
    for (i in blocked) {
    if ($(this).hasClass('from_' + blocked[i])) {
    $(this).css('display', 'none');
    }
    }
    for (i in ignored_topics) {
    css_class = 'hot_t_' + ignored_topics[i];
    if ($(this).hasClass(css_class)) {
    $(this).css('display', 'none');
    }
    }
    });
    </script>

    不用想得这么复杂,其实用户根本不关心你分页,眼不见心不烦,帮 TA 隐藏掉就可以了~

    顺便说,v2 这里没有啥黑魔法,代码走的基本都是最简单的套路,够用省事,当然了,也够粗暴
    flowfire
        7
    flowfire  
       2018-05-23 10:35:39 +08:00 via iPhone
    不太懂。。。没有缓存的情况下难道不是直接 NOT 就行了么
    John60676
        8
    John60676  
       2018-05-23 11:25:33 +08:00
    @iyangyuan V 站确实存在重复问题,如果不是特别需求的话,少量的重复还是可以接受的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:24 · PVG 17:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.