我们项目中有很多带搜索条件的列表页,点击每个列表项可以跳转到对应的详情页,跳转方式是直接更新location.href
. 这样会带来一些用户体验方面的问题: 用户设置了一些搜索参数,然后跳到详情在返回,发现搜索参数全部不见了,只能从头再来。
如果能将这些参数缓存,等用户回来时自动“还原”,那么用户体验就有很大的提升。
缓存选择
前端缓存数据的地方有cookie
、localStorage
、sessionStorage
,具体差别参见我的另一篇博客。
我们的需求是用户只要还留在窗口内,就应当受到缓存的保护,关闭窗口后缓存自动清除。这样localStorage
就不合适了,另外我们不想污染cookie
,所以最终选择sessionStorage
.
具体做法
API
主要用到了sessionStorage
的几个存取 API:
1 | interface Storage { |
在从缓存中恢复参数后,为了避免对后续的操作有影响,我们会将对应的值删掉。 用户可能在同一个窗口内先后浏览
多个列表页,每个列表页都有自己独立的搜索参数。删除时,我们需要小心不能把其他页面的缓存参数也删了。
所以需要给每个页面设置独特的缓存键值,推荐使用一个专门的常量对象来放这些键值,如下
1 | var SESSION_STORAGE_KEYS = {}; |
存储
在用户跳转到详情页之前将其设置的各种参数存入:
1 | /** |
获取缓存
在用户回到列表页后的初始化操作中,从缓存中拿到参数,然后设置到 DOM 上:
1 | /** |
清除缓存
虽然sessionStorage
提供了一个clear
方法,但它会清除所有数据,这样会把其他页面设置的缓存也清除。我们需要通过前面说的SESSION_STORAGE_KEYS
对象来逐个删除指定的键值对。
1 | /** |