基本上在我的网站上,我有一个带有一堆盒子的侧边栏;每个框都可以由用户折叠或展开。我需要为当前登录的用户保存每个框的状态。我不想使用 cookie,因为如果用户更改浏览器或计算机,所有框都将进入默认状态。
每次用户折叠/展开框时,我是否应该将此信息保存在数据库中进行查询?你会怎么处理这个?谢谢。
编辑:如果用户重复点击切换按钮,比如在两秒钟内点击十次,只是因为他喜欢盒子的动画?他将在两秒钟内进行十次查询。所以也许问题应该是:我应该什么时候保存这些数据?
基本上在我的网站上,我有一个带有一堆盒子的侧边栏;每个框都可以由用户折叠或展开。我需要为当前登录的用户保存每个框的状态。我不想使用 cookie,因为如果用户更改浏览器或计算机,所有框都将进入默认状态。
每次用户折叠/展开框时,我是否应该将此信息保存在数据库中进行查询?你会怎么处理这个?谢谢。
编辑:如果用户重复点击切换按钮,比如在两秒钟内点击十次,只是因为他喜欢盒子的动画?他将在两秒钟内进行十次查询。所以也许问题应该是:我应该什么时候保存这些数据?
如果您需要从多台计算机中保留这些选项,您将需要某种形式的服务器端存储。
这可以是数据库或平面文件。选择取决于您的可用资源、技能组合和扩展需求。如果您只有几个用户,那么平面文件可能是您的最佳选择。
每次盒子更改时调用(客户端)“更改”函数。
保留两项(客户端)状态:最后一次发送到服务器的更新的时间以及是否设置了计时器。
编写一个(客户端)“更新”函数,发送更新并更新状态以标记最近一次更新是刚刚发生的。
调用更改函数时:如果设置了定时器,则立即返回;如果从未发送过更新或最后一次更新是在十秒前发送的,则调用更新函数并返回。否则设置一个计时器以在十秒后发送更新。
计时器回调应该简单地清除计时器标志并调用更新函数。
同样在卸载事件中检查是否设置了计时器,如果设置了计时器,则清除计时器并调用计时器回调函数。
所以结果是您立即发送更新,除非用户在颤动,在这种情况下,您最多只每十秒发送一次更新。
在某些情况下您可能会丢失更新,但这可能仅发生在用户正在玩切换然后在计时器触发之前关闭页面的情况下,在这种情况下他可能无论如何都不会注意到。