JavaScript:我应该担心2011年的内存泄漏吗? [英] JavaScript: should I worry about memory leaks in 2011?

查看:88
本文介绍了JavaScript:我应该担心2011年的内存泄漏吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

JavaScript中的内存泄漏主题很少被提及.但是,我偶然发现了2007年写的本文.作者状态:

The topic of memory leaks in JavaScript is not brought up often. However, I stumbled upon this article, written in 2007. The authors state:

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

Internet Explorer and Mozilla Firefox are the two Web browsers most commonly associated with memory leaks in JavaScript.

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

Should I still be worrying about JavaScript memory leaks in 2011? If so, what should I be careful about?

推荐答案

一个好的javascript开发人员将意识到可能导致内存泄漏的各种设计模式,并且避免编写任何可能导致内存泄漏的代码.您编写的所有页面都很多.

A good javascript developer would be aware of various design patterns that can lead to memory leaks and you'd avoid coding anything that could turn in to a leak in pretty much all the pages you code.

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

For example, keeping a reference to any DOM object in a javascript variable will keep that DOM object alive in memory even if it's long since been removed from the DOM and you intended for it to be freed.

实际上,泄漏仅在某些情况下才是重要的.这是我特别担心它们的地方:

Practically speaking, leaks are only significant in some circumstances. Here's where I specifically worry about them:

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

我不太担心泄漏的地方:

Places where I don't really worry about leaks:

  1. 一个没有用户可以进行的长时间交互的网页.
  2. 在加载其他页面或重新加载该页面之前不久不会停留在屏幕上的网页.

我关注的一些关键事项.

Some of the key things I keep an eye out for.

  1. 在创建/销毁DOM元素时,任何包含对DOM元素的引用的持久JS变量或属性.
  2. 包含对其他DOM对象的引用或对包含对其他DOM对象的引用的JS对象的引用的DOM对象的任何属性(这可以在一些较旧的浏览器无法释放的JS/DOM之间创建循环引用和交叉引用).
  3. 我加载以供临时使用的任何大型数据结构.我确保不保留对这些大型数据结构的引用.
  4. 任何数据缓存.确保不要缓存任何您不想缓存的非常大的东西.确保所有重复使用的缓存不会永远累积,并且具有某种老化机制以清除旧对象.

这篇关于JavaScript:我应该担心2011年的内存泄漏吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆