使用XMLHttpRequest自动网页刷新内存泄漏

2024-05-11

问候,
我一直在为一些使用 8 位微控制器的硬件开发网络界面。该网页使用 HTML、javascript、JSON 和 XHR (XMLHttpRequest) 进行通信。我想做的是创建一个页面,使用 setInterval 使用控制器中的新值每 250 毫秒更新一次,以便网页“实时”更新,让用户感觉更像是一个应用程序。

我已经让它大部分工作,但发现我测试过的两种浏览器(IE 和 Chrome)代码中的某个地方存在内存泄漏。

我在网上研究过这个问题,似乎其他人也遇到了同样的问题,我尝试实施不同的修复措施但没有成功。

这里有一些代码快照,希望能够更好地解释事情,我修改了变量,以便它们在没有看到完整应用程序的情况下更有意义。

// start the pageRefreshTimer to update values
var pageRefreshTimer = window.setInterval(updateValues, 250);

// Standard XHR opener
HTTP.getText = function(url, callback) {
    var request = HTTP.newRequest(); // Searches array of standard XMLHttpRequest functions to try, code not shown...
    request.onreadystatechange = function () {
        if (request.readyState == 4 && request.status == 200) {
            callback(request.responseText) // responseText becomes JSONText below
        }
    }
    request.open("GET", url);
    request.send(null);
}

// Function that is constantly refreshed by HTML page to simulate real-time application
updateValues = function(parameter, value) {

    newURL = newURL + "?" + parameter; // newURL is defined elsewhere in the code...

    // Send the url and create the JSONObject
    HTTP.getText(newURL, function(JSONText) {
                    var JSONObject = eval('(' + JSONText + ')'); // Specific notation for JSON

                    // Load object values into Javascript variables
                    Controller.detectorPosition = JSONObject.detectorPosition;
                    Controller.offset = JSONObject.offset;
                    Controller.actuatorPosition = JSONObject.actuatorPosition;
    });

    delete JSONObject; // My attempt at manual garbage collection, didn't resolve the memory leak
}

作为参考,从微控制器发送到浏览器的 JSON 文件看起来像这样......

{ "offset": "1500", 
"detectorPosition": "1558", 
"actuatorPosition": "120" }

这看起来像代码中“闭包”的问题吗?

使用 Chrome 中的开发人员工具 (Ctrl-Shift-J),我注意到对 ParameterValues.json 文件(350B 大小)进行了多次调用,因为这是存储来自微控制器的值的 JSON 对象;但是浏览器是否以某种方式在内存中存储/缓存每个页面?

我的评论中附有该问题的两个屏幕截图。第二个是我在 XMLHttpRequest 循环中设置断点的地方,看起来右侧的“closure”面板中有一个循环引用。有人看到这个问题吗?

我可以做些什么来更深入地挖掘并获取更多信息?

提前致谢!


有一个 Google Code 项目创建了一个跨浏览器实现XMLHttp请求 https://code.google.com/p/xmlhttprequest/。他们还保留了一个小清单原生 XMLHttpRequest 错误 http://www.ilinsky.com/articles/XMLHttpRequest/#bugs这可能对你有用。

以下错误似乎可能适用于您的情况:

Bug:XMLHttpRequest 的实例不会被垃圾收集,以防万一 你有一个实例的引用 或其他 [原文如此] COM 对象(例如 例如:DOM 节点等)在其 onreadystatechange 处理程序,因此 产生运行时内存泄漏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用XMLHttpRequest自动网页刷新内存泄漏 的相关文章

随机推荐

  • 运行 Django 测试时如何将 DEBUG 设置为 True?

    我目前正在运行一些 Django 测试 看起来DEBUG False默认情况下 有没有办法运行我可以设置的特定测试DEBUG True在命令行还是在代码中 对于测试用例内的特定测试 您可以使用 override settings 装饰器 f
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 从发布的文件中删除 PDB 引用

    在使用任何 IDE 调试和创建文件后 我总是会查看最终的二进制可执行文件或 DLL 现在我正在尝试 Visual C 2010 寻找最佳版本 没有垃圾或不必要的引用 因此 我创建了一个包含两个项目的新解决方案 一个可执行文件及其 DLL V
  • Python 上每个系数具有特定约束的多元线性回归

    我目前正在数据集上运行多元线性回归 起初 我没有意识到我需要限制自己的体重 事实上 我需要有特定的正权重和负权重 更准确地说 我正在做一个评分系统 这就是为什么我的一些变量应该对音符产生积极或消极的影响 然而 当运行我的模型时 结果不符合我
  • Pandas如何将多个函数应用于数据框

    有没有办法像 DataFrameGroupBy agg 函数那样将函数列表应用于 DataFrame 中的每一列 我发现了一个丑陋的方法来做到这一点 df pd DataFrame dict one np random uniform 0
  • Google Maps iOS SDK:地图上东西点之间的距离

    如何计算地图东点和西点之间的距离 以米为单位 假设用户更改了滚动地图的位置 然后我使用 mapView didChangeCameraPosition delegate 方法捕获移动 但我不知道如何计算距离 这是一个辅助函数 可用于计算两个
  • EmberJS:如何为 ember-data RESTAdapter 中的模型提供特定的 URL?

    问题一 如果我有一个名为 Company 的余烬数据模型 我如何告诉它点击 businesses and businesses id而是检索记录 有没有办法指定给定模型的 url 更好的是 像 BackboneJS 一样 我可以在运行时计算
  • Azure webjob - 队列处理功能的正常关闭

    我有一堆 webjob 队列处理函数 public static void ProcessSomething QueueTrigger testrequest TestThing thing TextWriter logger Cancel
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 如何从 WinRT StreamSocket 读取所有可用数据并清空 inputStream?

    我想在向套接字写入新数据之前读取当前正在等待套接字的所有数据 WinRT中的读取方法都是异步的 所以我不能简单地while直到套接字为空 由于我确实想丢弃套接字上的数据 因此我不想使用读取器 而是直接从套接字读取数据IInputStream
  • 改变换行行为

    我可以在 TextView 中使用 Spannable 创建具有不同外观 下划线 删除线等的跨度 我怎样才能做同样的事情来改变换行行为 特别是 我不希望电子邮件地址在中间换行 我希望它像一个单词一样 I tried 包裹在一起跨度 http
  • 如何在Python中获取套接字的外部IP?

    当我打电话时socket getsockname 在套接字对象上 它返回我的机器的内部 IP 和端口的元组 但是 我想找回我的外部IP 最便宜 最有效的方式是什么 如果没有外部服务器的配合 这是不可能的 因为您和另一台计算机之间可能存在任意
  • CSS 3.0 用户选择属性替换

    我正在使用 CSS 3 0 它抱怨 用户选择 属性不存在 有谁知道合适的替代品或替代品是什么 user select is 回到规范 https drafts csswg org css ui 4 propdef user selectCS
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • [karma-server]:类型错误:无法读取未定义的属性“范围” - CI 环境中的 Angular 单元测试

    我们的 CI CD 管道停止处理 ng test 作业并失败并显示以下错误消息 karma server TypeError Cannot read property range of undefined at handleRangeHea
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 使用 sapply 的列表和矩阵

    我有一个也许是基本的问题 我在网上搜索过 我在读取文件时遇到问题 尽管如此 我还是按照 Konrad的建议设法读取了我的文件 我很欣赏这一点 How to get R to read in files from multiple subdi
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 使用XMLHttpRequest自动网页刷新内存泄漏

    问候 我一直在为一些使用 8 位微控制器的硬件开发网络界面 该网页使用 HTML javascript JSON 和 XHR XMLHttpRequest 进行通信 我想做的是创建一个页面 使用 setInterval 使用控制器中的新值每