JavaScript:2011 年我应该担心内存泄漏吗?

2024-03-26

JavaScript 中的内存泄漏这个话题并不经常被提及。然而,我偶然发现本文 http://www.ibm.com/developerworks/web/library/wa-memleak/,写于 2007 年。作者指出:

Internet Explorer 和 Mozilla Firefox 是最常用的两种 Web 浏览器 通常与 JavaScript 中的内存泄漏相关。

2011 年我还应该担心 JavaScript 内存泄漏吗?如果是这样,我应该注意什么?


优秀的 JavaScript 开发人员会意识到可能导致内存泄漏的各种设计模式,并且您会避免在几乎所有编码的页面中编写可能导致泄漏的任何内容。

例如,在 javascript 变量中保留对任何 DOM 对象的引用将使该 DOM 对象在内存中保持活动状态,即使它早已从 DOM 中删除并且您打算释放它。

实际上,泄漏仅在某些情况下才显着。这是我特别担心的地方:

  1. 我在计时器上重复执行的任何操作,特别是如果它可以长时间运行的话。例如,如果您有一个可能会永远循环的幻灯片,则必须绝对确保幻灯片中没有任何内容是 JS 或 DOM 对象的累积泄漏。
  2. 一个像应用程序一样工作的网页,用户可能会长时间停留在同一页面上,与页面交互,执行 ajax 调用等......例如,一个网络邮件应用程序可能打开并在同一个实际浏览器上文档很长一段时间进行大量的用户和服务器交互。
  3. 定期创建和销毁大量 DOM 元素的网页,就像定期使用 ajax 获取一堆新 HTML 的网页一样。

我不太担心泄漏的地方:

  1. 没有用户可以执行的长时间运行的交互集的网页。
  2. 在加载其他页面或重新加载此页面之前,网页不会在屏幕上停留很长时间。

我密切关注的一些关键事项。

  1. 创建/销毁 DOM 元素时包含对 DOM 元素的引用的任何持久 JS 变量或属性。
  2. 包含对其他 DOM 对象的引用的 DOM 对象的任何属性,或对包含对其他 DOM 对象的引用的 JS 对象的引用(这可能会在 JS/DOM 之间创建循环引用和交叉引用,某些较旧的浏览器无法释放这些引用)。
  3. 我加载供临时使用的任何大型数据结构。我确保不保留对这些大型数据结构的引用。
  4. 任何数据缓存。确保没有缓存任何您不想缓存的大数据。确保所有重复使用的缓存不会永远累积,并具有某种老化机制来清除旧对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript:2011 年我应该担心内存泄漏吗? 的相关文章

  • 循环遍历数组并删除项目,而不中断 for 循环

    我有以下 for 循环 当我使用splice 要删除一个项目 我发现 秒 未定义 我可以检查它是否未定义 但我觉得可能有一种更优雅的方法来做到这一点 我们的愿望是简单地删除一个项目并继续 for i 0 len Auction auctio
  • javascript:全局变量泄漏

    每当我向 Firefox 提交插件时 我都会收到一封电子邮件 告诉我我的一些变量正在泄漏到全局范围内 一旦他们告诉我我解决了问题 但在那之前有什么方法 程序 来检查变量是否泄漏到全局范围内 Thanks Both JSLint http w
  • Chrome 扩展程序可以相互通信吗?

    我正在编写一个Chrome扩展程序 并且想要实现一个接口或api 以便我将来制作的其他扩展程序可以使用它 最终的效果可能如下 分机 B 呼叫extensionA someMethod someParameters 并向分机A发送一些数据 分
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • 如何将“X-Content-Type-Options: nosniff”添加到我的网络服务器的所有响应标头中

    我正在运行一个 apache 网络服务器 我想将 X Content Type Options nosniff 添加到来自我的网络服务器的所有响应标头 我怎样才能做到这一点 是否可以通过更改 apache 配置文件来实现此目的 确保 mod
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Next.js:错误:React.Children.only 期望接收单个 React 元素子元素

    我有一个名为Nav inside components目录及其代码如下所示 import Link from next link const Nav gt return div a Home a a About a div export d
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • D3 向对象添加超链接?

    我正在尝试制作 D3 图 它将代表我网站的菜单 我尝试按照此处的其他指南添加超链接 但它们都不起作用 每个对象都会有一个不同的 URL 指向 主页 关于 联系方式等 如果添加超链接 我可以拖动对象吗 这意味着如果我按住单击 如果我单击该对象
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 使 Bootstrap Popover 在悬停而不是单击时出现/消失

    我正在使用 Bootstrap 构建一个网站Popover http twitter github com bootstrap javascript html popovers我不知道如何使弹出窗口出现在悬停而不是单击时 我想做的就是当有人
  • 选择单选按钮时隐藏/显示 3 个文本框

    我有 2 个单选按钮 选择一个文本框时 我想显示 3 个文本框 并在选择其他文本框时隐藏它 这是代码 这是我的 2 个单选按钮
  • 在 React Web 应用程序中使用 createjs-soundjs

    我想用https www npmjs com package createjs soundjs https www npmjs com package createjs soundjs在 React Web 应用程序上播放声音 我正常安装了
  • 使用 File API polyfill 读取数据 URL

    我正在尝试使用文件 API 库 https github com mailru FileAPI https github com mailru FileAPI 作为不支持文件 API 的浏览器的后备 以便将文件作为数据 URL 读取并将其传
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文

随机推荐

  • 路径中存在非法字符。将 Skip 和 Take 与 IEnumerable 一起使用时出错

    您好 我的控制器中有以下操作 AcceptVerbs HttpVerbs Post public ActionResult Index IEnumerable
  • IIS Express 上的基本身份验证

    我已经搜索了一段时间但似乎找不到答案 有多种方法可以禁用 启用匿名和 Windows 身份验证 有谁知道如何在 Visual Studio 2013 中的 IIS Express 8 0 上启用基本身份验证 Update Applicati
  • 将 JSON 对象反序列化为 .NET HashSet

    以下是原始 JSON 数据的示例 Standards 1 1 我想将数据反序列化为 public class Model public HashSet
  • java.lang.ClassCastException:java.io.ObjectStreamClass无法转换为java.lang.String

    我在 tomcat 上运行 Web 应用程序时遇到以下堆栈跟踪错误 无法找到此异常的根本原因 Eclipse 32 bit Luna Release 4 4 0 Tomcat 32 bit 8 0 30 jdk1 8 0 66 Jan 01
  • 为什么只有打开 Fiddler 才能在 ASP.NET 中调用 API?

    我在索引控制器中调用 API 就像这样 一切正常 只要我打开 Fiddler public ActionResult Index Base model null var client new HttpClient var task clie
  • 仅增加特定网页上的请求超时

    是否可以仅增加一个特定网页的请求超时 我正在开发 ASP Net 4 0 我需要一个特定页面具有更长的请求超时 因为它负责启动一个长时间运行的进程 谢谢 使用Web config
  • 如何让多个div水平滚动?

    我希望我的图块位于同一行 并且如果图块超出容器的宽度 容器可以水平滚动 看下面的演示 图块被添加到下一行 所以我必须垂直滚动才能访问它们 如何使水平滚动起作用 并使所有图块保持在同一行 container width 600px max h
  • 停止 Outlook、Gmail 等中的自动超链接

    我的网络应用程序向用户发送电子邮件 该电子邮件包含一个用于进一步用户操作的链接 我们的安全标准要求电子邮件中的链接不可点击 但是 电子邮件客户端会识别电子邮件中的 https 并自动链接 URL 关于如何阻止电子邮件客户端自动链接的任何想法
  • (Android) 在内部存储中查找路径 /Android

    Android 中有没有返回内部存储上的数据路径的方法 我有 2 部 Android 智能手机 三星 s2 和 s7 edge 我在其中安装了应用程序 我想获取位于此路径中的 sqliteDB Android data applicatio
  • 我应该使用堆栈进行长期变量存储吗?

    根据 汇编语言循序渐进 第3版 中的 Storage for Short Term 第8章 堆栈应该被视为短期存放东西的地方 存储在堆栈中的项目没有名称 通常必须按照放入的相反顺序从堆栈中取出 后进先出 记住 后进先出 然而 据我所知 C
  • Java libjava.so 文件错误

    自从我尝试在安装了 java5 jre 的服务器上运行 java 命令以来已经一天了 问题是我总是得到 错误 找不到 libjava so 错误 找不到 Java 2 运行时环境 即使我从安装目录 usr lib java1 5 jre b
  • “NULL”列 (0,3) 的数字溢出

    我有一个表 Oracle 12 1 0 2 0 当我总结我得到的值时 ORA 01426 numeric overflow 01426 00000 numeric overflow Cause Evaluation of an value
  • 使用 vala 将 uris 插入 Gtk.Clipboard

    我目前正在尝试为我的应用程序实现复制和粘贴 问题是我只能根据文档将纯文本或图像复制到剪贴板Gtk Clipboard https valadoc org gtk 3 0 Gtk Clipboard html https valadoc or
  • 如何使用Go Sdk for docker运行docker run?

    我想运行下面的 docker 命令docker run ajaycs14 hello world p 1527 80 d 如何实现上述使用Docker Go SDK https godoc org github com moby moby
  • 填充缺失的数据 pandas

    我如何填写此日期框中缺失的数据 没有销售的日子里缺少值 如何填写在特定商店和日期售出 0 件商品的天数的缺失值 Input Dates Store Item Sales 2017 01 01 Chicago Apple 10 2017 01
  • 如何将 GitLab CI 文件变量传递给 Dockerfile 和 docker 容器?

    GitLab CI 允许向项目添加自定义变量 它允许使用类型的秘密变量file我指定的键是变量名称 值是文件的内容 例如证书的内容 然后在管道执行期间 内容将被保存为临时文件 调用变量名称将返回创建文件的路径 最终我需要将此文件复制到构建项
  • 如何避免 RealmSwift 中的迁移

    我只是使用 Realm 测试一些配置 因此我在领域类中添加和删除了变量和列表 因为我只是在测试 所以我不想经历迁移过程 我也没有任何会影响连续性的数据 有什么方法可以解决 Realm 自动请求迁移的问题吗 无论架构发生变化 有两种方法可以跳
  • 关于使用 flutter 在 Android 上投放 Facebook 应用安装广告的branch.io 归属问题?

    我们有应用程序安装归因 适用于 iOS 和 Android 上的有机链接 使用flutter branch sdk https pub dev packages flutter branch sdk 但是 对于 Facebook 应用安装广
  • 为什么我收到 Http/1.1 400 Bad request?

    这是我的代码片段 我正在尝试使用 HTTPOST 登录该网站 我不断收到 400 Bad Request 我尝试了各种组合 我尝试将用户名 密码作为标头而不是 NameValuePair 传递 但结果相同 我有什么遗漏的吗 HttpClie
  • JavaScript:2011 年我应该担心内存泄漏吗?

    JavaScript 中的内存泄漏这个话题并不经常被提及 然而 我偶然发现本文 http www ibm com developerworks web library wa memleak 写于 2007 年 作者指出 Internet E