【问题标题】:localStorage store large size datalocalStorage 存储大容量数据
【发布时间】:2013-06-19 19:08:36
【问题描述】:

我想使用 localStorage 来存储大量数据(如 800GB),根据http://arty.name/localstorage.html 并且我正在使用 Firefox,我更改了我的 localStorage 大小和缓存大小。所以大小不是问题。但是,我写了一些类似下面的 jquery:

 $("a[href]").each(function(){
    $(this).click(function(event){
       localStorage.test += "somenewinformation";
      ...

如果这个 localStorage.test 已经有 400GB 这样的大量数据,那么存储信息的步骤会非常慢。当我点击一个链接时,jquery 会等待我完成向 localStorage.test 追加新信息,或者它只会转到下一页并且 localStorage.test 中的信息将全部丢失或 localStorage.test 将保持旧的价值?我不明白的是是否会生成一个新线程来在后台执行此存储以及在中间关闭浏览器是否会影响它。

抱歉描述混乱,提前致谢!

【问题讨论】:

  • 你知道,有一个原因localStorage是有限的。
  • 有些任务适合 Javascript。然后就是这个任务。说真的,使用服务器端代码和适当的数据库..
  • 我的硬盘甚至无法存储 800GB。
  • @TimWolla 这是在有 1TB 硬盘的计算机上完成的,所以大小不是问题。
  • 说真的,依赖 Javascript localStorage 来存储这么多数据是疯狂的——它不是为此而设计的。我会说为此使用 Javascript 也很疯狂,但是如果您致力于使用 javascript 方法,请查看 FileSystem API。至少这样您就可以使用适当的文件系统来拆分数据。

标签: javascript jquery click local-storage


【解决方案1】:

你不能!通常限制为 5 mb。

某些浏览器(例如 Opera)允许您调整大小,但这完全取决于浏览器,并且是用户发起的操作,而不是可编程操作。

即使可以,请记住localStorage 只能存储字符串,因此其他任何内容都需要先进行字符串化。再加上这是一个键/值存储阵列,你最终会遇到非常糟糕的性能。

如果您需要大容量存储,请改用 File API。这适用于大文件 (Blob),您可以将任何内容存储为 Blob。

800 Gb 是一个大容量,文件 API 只能与文件系统一样快地工作(充其量,可能会慢一些,因为它是沙盒的,即不是纯文件系统)。

有关文件系统 API 的更多信息(注意:自 2014 年 4 月起停产):
http://www.w3.org/TR/file-system-api/

教程:
http://www.html5rocks.com/en/tutorials/file/dndfiles/

Blob:
https://developer.mozilla.org/en-US/docs/Web/API/Blob

更新由于文件系统 API 已停止使用,基本上只剩下两个选项(除了将数据存储到服务器之外):

  • 索引数据库 API 又名 Indexed DB(推荐)
  • Web SQL(已弃用,但在 Safari 等浏览器中仍受支持)

此外,这些最初的大小受到浏览器的限制。可以要求用户接受的更大报价。

在此处查看有关此 API 的更多详细信息:
http://www.w3.org/TR/IndexedDB/

【讨论】:

  • 能否将客户端javascript中的内容写入用户的本地文件系统?
  • @user2489547 不直接。浏览器中的所有文件操作都是沙盒的,即。出于明显的安全原因,不受普通文件系统的保护。但是使用虚拟文件系统,您可以让体验看起来就像用户在本地使用文件一样。
  • 请告诉我如何使用这些来存储文件?!?您是指文件系统 API 吗?
  • @Cyber​​Fox 让我回想起两年...是的,它可能意味着文件系统 API。虽然,文档中使用了名称“文件 API”(现在仍然如此),这可能是错误链接潜入的原因:请参阅 w3.org/TR/file-system-api(无论如何,后者已停用)
  • 如果最终用户从浏览器设置中清除 cookie 和缓存,本地存储将被删除
【解决方案2】:

LargeLocalStorage 提供了一种跨浏览器的方式来在本地存储大量数据。您可以存储二进制数据或字符串。

LargeLocalStorage 在 Chrome 中使用 FilesystemAPI,在 IE 和 Firefox 中使用 IndexedDB,在 Safari 中使用 WebSQL

【讨论】:

  • LargeLocalStorage 要求最终用户接受提示以允许“在此设备上存储文件”(至少在 Chrome 中),我认为这是一个很大的警告。
  • @Micah 嗯,如果一个网站可以在没有我明确许可的情况下存储 1GB 以上的数据,我会很害怕。
  • GitHub 上的最后一个活动是 5 年前。有谁知道这是否仍然可靠?
  • @Micah 您不希望网站能够在不询问的情况下分配您的整个磁盘...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2020-09-25
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多