【问题标题】:Store more than 100 MB client side in the browser between sessions在会话之间的浏览器中存储超过 100 MB 的客户端
【发布时间】:2021-07-25 17:50:50
【问题描述】:

我正在设计一个需要预加载数百 MB 客户端才能使用该服务的网站。上下文:由于服务应该以尽可能低的延迟实时使用,因此这种预加载是强制性的; “按需”流式传输内容不是一种选择(我已经研究过替代选项,我确认这是必要的)。

问题:由于加载 400 MB 对最终用户来说相当长,有哪些选项可以让用户在关闭浏览器然后重新打开网站时不必这样做再次重新下载 400 MB?

一个明显的解决方案是localStorage,但这仅限于 10 MB(请参阅What is the max size of localStorage values?)。

还有哪些其他选项(存储的数据应该可以从 JavaScript 获得)?

我可以要求用户安装 Chrome 扩展程序,但它是否允许超过 10 MB 的存储空间?

【问题讨论】:

    标签: javascript google-chrome-extension browser web-applications local-storage


    【解决方案1】:

    仅考虑存储问题... 你没有太多选择。

    1. IndexedDb。在 IndexedDB 上构建和操作不需要进一步的许可。主要浏览器都支持IndexedDb(您必须检查Safari) IndexedDb 是一个奇怪的对象,您会在学习时看到它。您几乎可以像处理真实数据库一样创建、读取、更新和删除。我不会把它称为 Oracle、mySQL、Sql server 的关系型数据库……但是,它是一个事务型数据库。

    2. 文件系统访问 API。 此解决方案需要用户同意访问用户文件系统(通过“用户手势”,每次用户退出浏览器会话时它都会丢失 - 它是无聊的)。如果您的 400 Mb 数据不是结构化数据,例如用户播放的音频/视频文件。

      请注意,即使没有扩展,它也可以工作。更多信息可以找到here。 这是一个例子:https://googlechromelabs.github.io/text-editor/

    我建议你第一种方式。

    【讨论】:

    • 谢谢@Robbi!网站的访问者是否需要在浏览器中启用特殊功能才能使用 IndexedDB?对于 2.,我想答案是肯定的,因为默认情况下,网站无法访问用户的文件系统(幸运的是!)。它会显示什么样的警报来询问用户是否允许 FS 访问?
    • 1.不,在 indexedDB 上构建和操作不需要进一步的权限。主要浏览器都支持IndexedDb(您必须检查Safari) IndexedDb 是一个奇怪的对象,您会在学习时看到它。您几乎可以像处理真实数据库一样创建、读取、更新和删除。我不会把它称为 Oracle、mySQL、Sql server 的关系型数据库……但是,它是一个事务型数据库(这可不小!)。
    • 2.现在使用 FSA,您可以访问 FS,但只有在用户同意的情况下。必须通过“用户手势”给予同意,并且每次用户退出浏览器会话时都会丢失(这很无聊)。如果您的 400 Mb 数据不是结构化数据,例如用户播放的音频\视频文件。
    • 谢谢@Robbi!随意编辑以将所有这些非常有用的细节包含在问题中,这将非常适合将来参考! PS:你有显示2.的网站示例吗?我想看看用户体验如何/如何同意访问 FS。
    • 在网站和扩展中有几个 indexedDb 的用例。你应该做一些谷歌搜索。了解您的服务将使用什么样的资源来为您提供最佳选择也很重要。如果你做了一个糟糕的选择,你很容易以后会后悔。对于 2,如果您想查看 FSA 同意弹出窗口是如何尝试这个小扩展:wetransfer.com/downloads/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2019-02-20
    • 2013-12-18
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多