在localStorage中写入NS_ERROR_OUT_OF_MEMORY

时间:2017-04-27 20:58:07

标签: javascript html5 local-storage

当我在localStorage中编写时,Firefox中出现此异常的原因是什么?

这是在localStorage中写入的函数:

try {
        localStorage[key] = JSON.stringify(data);
    } catch(e) {
     .... // CODE TU PRINT THE ERROR
    }

仅供参考,我将Firefox的storageQuota设置为一个非常高的数字,以便节省大量数据,因为我的目的默认值非常低。

如果有人可以提供帮助或需要更多信息,请发表评论或提问。 谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题根本不在于本地存储空间。 NS_ERROR_OUT_OF_MEMORY表示您已退出内存。超过浏览器的本地存储空间配额会导致QUOTA_EXCEEDED_ERR(或等效)错误。

您的内存出现错误,因为您的JSON.stringify(...)来电太大而无法进入内存。

你可以

  • a)将您的对象分成更小的部分,并将它们分别串联。单独,这可能不足以解决您的问题。这取决于你的JSON如此巨大的原因。
  • b)对{em> replacer 参数使用JSON.stringify(...)的重载。请参阅文档以了解正确用法。你可以修剪'来自JSON的不必要数据并处理任何循环引用。

这就是事情,如果你有一个巨大的对象并且该对象被引用了数十次,那么该对象将出现在你的JSON 中几十次。换句话说,作为一个对象,它存在于内存中一次,但是当序列化时,对象会一遍又一遍地被序列化。这会让你的JSON膨胀。取出该对象,将其转换为自己的JSON,并用ID替换对它的引用可以显着缩小您的JSON。如果需要或需要, replacer 参数可用于执行此操作。