2016-06-08 45 views
4

我正在构建一个将依赖于缓存的移动Web应用程序。 如果我的缓存使用的内存太多,我在移动Safari中看到此消息...你能捕捉到JavaScript中的内存不足错误吗?

“此网页发生问题,所以重新加载”。

没有干预,页面将重新加载并重复执行相同的操作,直到它放弃为止。

是否有事件可以捕获,堆信息我可以监视或设置,我可以更改以构建比强制页面重装更具弹性的缓存系统?

Chrome有window.performace.memory但我似乎无法找到任何与解决移动Safari中的问题相关的任何内容。 Try/catch语句和onBeforeUnload事件不会阻止页面加载或提供清除/减少缓存的机会。

回答

1

这有帮助吗?

Error handling "Out of Memory Exception" in browser?

var localStorageSpace = function(){ 
var allStrings = ''; 
for(var key in window.localStorage){ 
    if(window.localStorage.hasOwnProperty(key)){ 
     allStrings += window.localStorage[key]; 
    } 
} 
return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)'; 
}; 

var storageIsFull = function() { 
var size = localStorageSpace(); // old size 

// try to add data 
var er; 
try { 
    window.localStorage.setItem("test-size", "1"); 
} catch(er) {} 

// check if data added 
var isFull = (size === localStorageSpace()); 
window.localStorage.removeItem("test-size"); 

return isFull; 

}

+0

我不使用本地存储,但您提出的系统依赖于知道这个功能的内存限制,我不知道有多少可用内存是问题的核心。 –

+0

另一个有用的链接。 http://stackoverflow.com/questions/23506064/how-do-you-detect-memory-limits-in-javascript –