【发布时间】:2014-03-09 11:22:31
【问题描述】:
localStorageTest 在 localStorage 中存储一个递增的值,直到达到浏览器的 localStorage 大小限制。
function localStorageTest(key, len) {
var value = window.localStorage.getItem(key);
value = (value == null)?"":value;
var numIters = len - value.length;
while(numIters--) {
value += "1";
window.localStorage.setItem(key, value);
if (window.localStorage.getItem(key) != value) {
console.log("limit reached at " + (value.length-1).toString() + " bytes");
break;
}
}
console.log("stored " + value.length + " bytes");
}
铬:
localStorageTest("1", 80000);
<browser crashed>
火狐:
localStorageTest("1", 50000);
<browser crashed>
怀疑浏览器内存使用量增加,我写了localStorageIncrementalTest,它与localStorageTest 做同样的事情,但使用setTimeOut 调用在其操作之间设置了5 秒的空闲时间。
var increment = 5000;
function localStorageIncrementalTest(key, len) {
var value = window.localStorage.getItem(key);
value = (value == null)?"":value;
var numIters = len - value.length;
var limitReached = false;
while(numIters--) {
value += "1";
window.localStorage.setItem(key, value);
if (window.localStorage.getItem(key) != value) {
console.log("limit reached at " + (value.length-1).toString() + " bytes");
limitReached = true;
break;
}
}
console.log("stored " + value.length + " bytes");
if (!limitReached) {
setTimeout(function() {
localStorageIncrementalTest(key, len+increment);
}, 5000);
}
}
铬:
localStorageIncrementalTest("1", 30000);
stored 30000 bytes
stored 35000 bytes
...
stored 1800000 bytes
<browser crashed>
火狐:
localStorageIncrementalTest("1", 30000);
stored 30000 bytes
stored 35000 bytes
...
stored 60000 bytes
<browser crashed>
所以 localStorageIncrementalTest 允许我们在 localStorage 中存储比 localStorageTest 更多的内容,然后浏览器崩溃。
谁能解释一下浏览器崩溃的原因,以及避免同样情况的可能解决方案?
我使用的是 Chrome 28.0.1500.71 和 Firefox 26.0
更新:
function getRandomValue(size) {
var value = "";
for (var i = 0; i < size; i++) {
value += Math.ceil(Math.random()*5);
}
return value;
}
function localStorageTest2() {
for (var i = 0; i < 70000; i++) {
window.localStorage.setItem("1", getRandomValue(20000));
}
}
铬:
localStorageTest2();
<browser crashed>
火狐:
localStorageTest2();
<browser crashed>
测试localStorage2 也导致浏览器崩溃。
【问题讨论】:
标签: html google-chrome firefox local-storage