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

"不再显示"后台应如何设计?

  •  
  •   nikoo · 2017-08-04 06:40:35 +08:00 · 2216 次点击
    这是一个创建于 2666 天前的主题,其中的信息可能已经有所发展或是发生改变。
    站点中一些功能页面包含了新手引导,比如回帖页面,会出现回帖贴教学告知相应规则,新注册用户后首页也有相应的新手引导信息

    这些提示信息都有“不再显示”的勾选框和确认按钮

    那么在用户勾选并关闭了某提示信息后,应该如何能兼顾效率的做到让该信息永不显示?

    我们所尝试的方案 1:Cookie
    之前我们使用了 Cookie 的方案,关闭信息框后增加 "hide_回帖教学" 的 Cookie 保存 365 天,如果有 "hide_回帖教学" 的 Cookie 就不显示回帖教学
    但这个方案在用户更换浏览器或者浏览设备后就失效了

    我们所尝试的方案 2:数据库储存
    我们设计了一个表:user,name(char 16),hide(boolean)
    关闭信息框后增加记录 name:"回帖教学" hide:1
    但这样的话所有用户每次打开回帖页面都需要 select * from `tips` where user=? && name=? && hide=1 做这个 SQL 判断,显然不够效率

    我们所尝试的方案 3:数据库储存+缓冲
    每次用户登录先 select * from `tips` where user=? 搜索出该用户全部的教学信息提示,并将结果缓冲
    然后在回帖等需要显示提示信息的地方判断缓冲中是否存在已经“不再显示”了的
    这个方案的问题是提示信息多的时候需要缓冲的内容相应增多,需要为每个用户额外开支更多缓冲内存

    针对这个需求,有没有比方案 3 更好的方法?
    17 条回复    2017-08-05 00:24:27 +08:00
    huijiewei
        1
    huijiewei  
       2017-08-04 07:03:42 +08:00 via iPhone   ❤️ 1
    1+2
    nikoo
        2
    nikoo  
    OP
       2017-08-04 07:13:39 +08:00
    @huijiewei 谢谢,那么 Cookie 是不是不设置有效期?(关闭浏览器即删除)
    似乎有些站是这么做的,控制台里可以看到各种 Cookies 用于屏蔽提示信息
    mooncakejs
        3
    mooncakejs  
       2017-08-04 08:06:16 +08:00 via iPhone
    登录的时候设置 cookie
    nikoo
        4
    nikoo  
    OP
       2017-08-04 08:12:51 +08:00
    @mooncakejs 如果网站有 100 处提示信息,难道用户登录时要写 100 个 cookie 给他?
    kokutou
        5
    kokutou  
       2017-08-04 08:15:30 +08:00 via Android
    搞一个 32 位字串 /int,前后台约定某一位为 1 就隐藏对应东西。
    就只需要一个 cookies 了嘛。

    初学编程,我这想法对吗?
    nfroot
        6
    nfroot  
       2017-08-04 08:19:08 +08:00
    @kokutou 这个想法是极好的,也有用 26 进制 36 进制 62 进制的
    johnny23
        7
    johnny23  
       2017-08-04 08:28:16 +08:00 via iPhone
    user 加个字段 写一个 json 字符串来存储
    arischow
        8
    arischow  
       2017-08-04 08:29:15 +08:00 via iPhone
    session
    mooncakejs
        9
    mooncakejs  
       2017-08-04 09:08:07 +08:00 via iPhone
    @nikoo cookies 太多增加请求大小。 按位来存或者 localstorage
    ChefIsAwesome
        10
    ChefIsAwesome  
       2017-08-04 09:40:41 +08:00
    本地存啊。只要指导页有跳过的按钮,对用户来讲并不是很烦人的事情。你往数据库里记是可以,但如果这个指导页是对没账户的新用户显示的呢,难道他们就不能跳过了吗。
    DsuineGP
        11
    DsuineGP  
       2017-08-04 09:44:07 +08:00
    写 cookie 不太好吧,浏览器缓存一清就没了.
    在 user 加字段存一个 32 位的 int 值或者直接存 json 比较好,也方便扩展.
    sarices
        12
    sarices  
       2017-08-04 10:21:30 +08:00
    存到数据库,然后登录的时候读取写入 session,判断的时候根据 session 判断就可以了
    Miy4mori
        13
    Miy4mori  
       2017-08-04 10:24:26 +08:00 via iPhone
    登陆的时候直接把个人设置和用户信息返回到 client 保存啊,为什么要每次打开回帖页面再请求?
    wshcdr
        14
    wshcdr  
       2017-08-04 10:55:29 +08:00
    @nikoo 方案 2 和方案 3 有什么区别么?
    nikoo
        15
    nikoo  
    OP
       2017-08-04 13:08:52 +08:00
    @sarices @Miy4mori 这是不是就是第三种方案?

    @wshcdr 方案 3 缓存了 2 的结果,方案 2 没缓存,如此而已
    Miy4mori
        16
    Miy4mori  
       2017-08-04 14:14:31 +08:00 via iPhone
    @nikoo 没看懂你 2 中讲的缓冲是什么
    HYSS
        17
    HYSS  
       2017-08-05 00:24:27 +08:00
    判断用户凭证
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.