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

2017-08-04 06:40:35 +08:00
 nikoo
站点中一些功能页面包含了新手引导,比如回帖页面,会出现回帖贴教学告知相应规则,新注册用户后首页也有相应的新手引导信息

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

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

我们所尝试的方案 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 更好的方法?
2131 次点击
所在节点    问与答
17 条回复
huijiewei
2017-08-04 07:03:42 +08:00
1+2
nikoo
2017-08-04 07:13:39 +08:00
@huijiewei 谢谢,那么 Cookie 是不是不设置有效期?(关闭浏览器即删除)
似乎有些站是这么做的,控制台里可以看到各种 Cookies 用于屏蔽提示信息
mooncakejs
2017-08-04 08:06:16 +08:00
登录的时候设置 cookie
nikoo
2017-08-04 08:12:51 +08:00
@mooncakejs 如果网站有 100 处提示信息,难道用户登录时要写 100 个 cookie 给他?
kokutou
2017-08-04 08:15:30 +08:00
搞一个 32 位字串 /int,前后台约定某一位为 1 就隐藏对应东西。
就只需要一个 cookies 了嘛。

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

@wshcdr 方案 3 缓存了 2 的结果,方案 2 没缓存,如此而已
Miy4mori
2017-08-04 14:14:31 +08:00
@nikoo 没看懂你 2 中讲的缓冲是什么
HYSS
2017-08-05 00:24:27 +08:00
判断用户凭证

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX