【问题标题】:Can you catch an out of memory error in JavaScript你能在 JavaScript 中发现内存不足错误吗
【发布时间】:2016-10-09 01:58:08
【问题描述】:

我正在构建一个依赖缓存的移动网络应用。 如果我的缓存使用了太多内存,我会在移动 Safari 中看到此消息...

“此网页出现问题,因此已重新加载”。

在没有干预的情况下,页面将重新加载并再次执行相同的操作几次,直到它放弃。

是否有我可以捕获的事件、我可以监控的堆信息或我可以更改的设置来构建一个比强制页面重新加载更有弹性的缓存系统?

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

【问题讨论】:

    标签: javascript caching memory mobile


    【解决方案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;
    

    }

    【讨论】:

    • 我没有使用 localStorage,但您提出的系统依赖于了解此功能的内存限制,我不知道有多少可用内存是问题的核心。跨度>
    • 另一个有用的链接。 stackoverflow.com/questions/23506064/…
    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2015-01-27
    • 2022-12-21
    相关资源
    最近更新 更多