|
|
1
3
简短回答:您发布的代码中没有内存泄漏问题。该视图包含对控制器的引用,但反之亦然。因此,只要控制器的寿命比视图长,该引用就不会阻止对象被垃圾收集。我在你的代码中没有看到循环引用。 更长的答案:陷阱可能在代码中 没有 张贴。特别是,必须正确清理视图中的任何事件处理程序,否则视图 never fade into oblivion 。但是你在问题中说过你要清理你的观点,所以我想你已经意识到了这种问题。 |
|
|
2
3
控制器在这里做的事情对我来说就像一个实用程序。可以很容易地由全局级的单例进行管理。我第一眼就看到了一些问题。
我宁愿编写一个实用函数,它可以为我创建和部署视图。
|
|
|
3
1
JavaScript实现很长一段时间没有遇到循环引用的问题。(如果我没记错的话,IE6确实存在循环引用导致的内存泄漏,这在那个时期没有被任何其他主要浏览器共享。) 现代JavaScript实现通过“标记和扫描”算法执行垃圾收集。首先,他们从全局对象开始扫描web应用程序的整个内存结构,并标记找到的所有内容。然后,他们扫描存储在内存中的每个对象,并垃圾收集任何未标记的对象。只要没有全局对象或任何存储函数对对象的引用,就可以对其进行垃圾收集。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#Mark-and-sweep_algorithm 您可能正在考虑基于引用计数的实现,它确实存在循环引用的内存泄漏问题。在该实现中,只要一个对象包含对另一个对象的引用,就不能对第二个对象进行垃圾收集。这种方法曾经在web浏览器中使用过,但现在不再使用了。 如今,大多数内存泄漏都来自于全局可访问的对象,您忘记清理这些对象,并且意外地将数据保留在函数闭包(一个创建另一个函数并将其传递/保存到某处的函数)中。由于闭包的局部变量可以由其内部创建的函数访问,因此只要该函数存在,它们就必须被保留。 因此,继续添加所有需要的循环引用。除非你需要瞄准IE6,否则你的代码就可以了。 |
|
|
MeseleÅuki · 使用主干更改URL。js公司 7 年前 |
|
|
master00 · 如何根据需要删除主干视图。js? 7 年前 |
|
|
Gwater17 · 无法有条件地渲染视图木偶 8 年前 |
|
|
user1358518 · 在主干表的行中创建事件 8 年前 |
|
|
user1692342 · 在主干视图中定义的下划线模板内调用函数 8 年前 |
|
|
user1358518 · _.渲染主干视图时bindAll不工作 8 年前 |