Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

管理后台新增/修改设置/相册/分类数据,重新加载时没有生效 #19

Open
409915016 opened this issue Oct 8, 2020 · 1 comment
Assignees
Labels
Milestone

Comments

@409915016
Copy link
Owner

409915016 commented Oct 8, 2020

这个问题与我在 2017 年版本 FAQ 中的 《修改了分类或相册数据然而在其他设备并没有生效》问题非常相似,有两个原因共同导致了该问题发生:

原因一:程序设计不完善
原因二:未触发七牛云 CDN 缓存刷新策略

一、程序设计不完善

原先的程序逻辑将 conifg.json 文件上传至七牛云,没有保存或者更新数据库(基于 IndexedDB)对应的数据表。这使得下次进入设置页,仍然保留旧的内容。

有意思的是,这里会出现几种状况(忽略原因二):

  • 当前页面修改后的配置被上传到七牛云,本地数据库未更新,所以下次进入配置页仍然读取本地数据库的配置。
  • 当本地不存在数据时,请求七牛云获取到的配置
  • 由于优先读取本地数据库的原因,含有较旧版本数据的客户端,没有获取线上最新数据表的逻辑,导致部分相册数据不能完整显示

解决方式

config.json 文件上传成功后,将数据保存到本地数据库,详细实现见 commit

二、通过携带随机 URL 参数刷新资源

实现方法:

例如,如果 http://dn-odum9helk.qbox.me/resource/gogopher.jpg 这个图片资源没有更新,可以在该 URL 后面加上问号随机参数的形式来让 CDN 强制刷新:http://dn-odum9helk.qbox.me/resource/gogopher.jpg?v=1234567 ,CDN 拿到这个 URL 后会强制回源站中取回最新的资源

解决方式

获取文件时加入查询函数

filmyBucket.getFile(`config.json?${new Date().getTime()}`)
@409915016 409915016 added bug 确认的问题 enhancement 改进 管理后台 labels Oct 8, 2020
@409915016 409915016 self-assigned this Oct 8, 2020
@409915016 409915016 added this to the v1.0.0 milestone Oct 8, 2020
@409915016 409915016 changed the title 管理后台修改了 filmy 设置,重新加载时没有生效 管理后台新增/修改设置/相册/分类数据,重新加载时没有生效 Oct 9, 2020
@409915016
Copy link
Owner Author

由于优先读取本地数据库的原因,含有较旧版本数据的客户端,没有获取线上最新数据表的逻辑,导致部分相册数据不能完整显示

从实用性和商业角度来看,缓解这问题的方案是对比线上与本地的差异数据,并进行合并;本着学习 ES6 语法和 Vue 框架意图来看,该问题不是太严重;可以往后再修复该流程缺陷

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant