javascript - IE 泄漏动态生成的 javascript 的内存

标签 javascript internet-explorer

最近我必须定期执行通过 Ajax 从 Web 服务器检索的脚本。我首先创建一个 Script 标签并分配 text 属性来运行脚本。然后,我处理脚本标签只是为了发现在 IE 7 中每次创建时内存都在不断增加。下面的 HTML 说明了这个问题:

<html>
<body>
<span id='m_garbageBin'></span>
<script type="text/javascript">
    function buttonClicked()
    {
        for (var i = 0; i < 100000; i++)
        {
            var sc = document.createElement("script");
            sc.text = "var x=1;";
            document.body.appendChild(sc);
            m_garbageBin.appendChild(sc);
            m_garbageBin.innerHTML = '';
        }
    }
</script>
<script id='m_dynamicScript' type="text/javascript">
</script>
    <input type='button' value='Click me!' onclick='buttonClicked();'/>
</body>

该脚本根本没有做任何事情,并且在 IE 中每次单击按钮时内存仍然在增加,但在 Firefox 中没有(通过使用 .innerHTML 而不是 .text)。我必须检索脚本以定期执行的事实无法更改。任何人都知道我可以做些什么来避免 IE 中的内存增加?

最佳答案

尝试在添加 script 元素后删除它们,这样的事情可能会有所帮助:

function buttonClicked() {
    var head = document.getElementsByTagName('head')[0];
    for (var i = 0; i < 100000; i++) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.text = "var x=1;";
        head.appendChild(script);
        head.removeChild(script);
    }
}

这就是一些现代库的方式,例如 jQuery make it .

另见:

关于javascript - IE 泄漏动态生成的 javascript 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972874/

相关文章:

javascript - 这是使用 jQuery 将我的 XML 解析为 JavaScript 对象的最快方法吗?

javascript - ASP MVC 5 自动完成不起作用

javascript - Firefox JavaScript 表单

css - IE 中的动画转换 CSS 无法按预期工作

javascript - 为什么 for every 在 Internet Explorer 中不起作用?有什么替代方法?

javascript - 滚动后更改 Bootstrap 导航栏品牌 Logo 图像的最佳方法?

Javascript 字符串比较不起作用,搜索了很多?

javascript - 报告服务出现奇怪的 IE 渲染问题

javascript - Internet Explorer 中的回流/布局非常慢

javascript - 使用适用于 IE 的 Javascript 模拟单击​​链接