V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
nikoo
V2EX  ›  问与答

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

  •  
  •   nikoo · Aug 4, 2017 · 2636 views
    This topic created in 3192 days ago, the information mentioned may be changed or developed.
    站点中一些功能页面包含了新手引导,比如回帖页面,会出现回帖贴教学告知相应规则,新注册用户后首页也有相应的新手引导信息

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

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

    我们所尝试的方案 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 replies    2017-08-05 00:24:27 +08:00
    huijiewei
        1
    huijiewei  
       Aug 4, 2017 via iPhone   ❤️ 1
    1+2
    nikoo
        2
    nikoo  
    OP
       Aug 4, 2017
    @huijiewei 谢谢,那么 Cookie 是不是不设置有效期?(关闭浏览器即删除)
    似乎有些站是这么做的,控制台里可以看到各种 Cookies 用于屏蔽提示信息
    mooncakejs
        3
    mooncakejs  
       Aug 4, 2017 via iPhone
    登录的时候设置 cookie
    nikoo
        4
    nikoo  
    OP
       Aug 4, 2017
    @mooncakejs 如果网站有 100 处提示信息,难道用户登录时要写 100 个 cookie 给他?
    kokutou
        5
    kokutou  
       Aug 4, 2017 via Android
    搞一个 32 位字串 /int,前后台约定某一位为 1 就隐藏对应东西。
    就只需要一个 cookies 了嘛。

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

    @wshcdr 方案 3 缓存了 2 的结果,方案 2 没缓存,如此而已
    Miy4mori
        16
    Miy4mori  
       Aug 4, 2017 via iPhone
    @nikoo 没看懂你 2 中讲的缓冲是什么
    HYSS
        17
    HYSS  
       Aug 5, 2017
    判断用户凭证
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1389 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 16:29 · PVG 00:29 · LAX 09:29 · JFK 12:29
    ♥ Do have faith in what you're doing.