我最近使用 Angular 进行了测试,我有一个简单的问题。我似乎无法通过搜索找到直接答案(很可能我搜索错误,所以请耐心等待)。
我正在构建一个相当大的单页网络应用程序,在我第一次尝试它时,我注意到 JavaScript 导致了内存泄漏。我意识到这是因为我在每次页面更改时引入了新的 javascript(在通过 ajax 引入的新内容中),并且它位于独立的 dom 树中。
我正在尝试使用 Angular 的第二种方法(出于令人难以置信的原因 - 主要是它使这些应用程序变得更容易一百万倍。但我想知道 Angular 如何解决这个问题。
假设我通过 Angular 运行所有功能,除了花哨的动画/过渡之类的功能。如果我为每个新页面(在每个页面上)都有脚本,那么使用 Angular 会遇到同样的问题吗?有没有更好的方法来处理这个问题和/或管理 SPA 上的 javascript 使用情况?
任何方向将不胜感激,谢谢!!!
最佳答案
使用 Angular 时绝对会遇到同样的问题。可能更糟糕,因为 Angular 的 DOM 操作让您有很多机会用分离的 DOM 来搞乱内存管理。
当您开始编写自定义指令时,请确保使用 $destroy
事件来清理对 DOM 的任何引用;这是我在 Angular 中寻找泄漏的第一件事。
$scope.$on('$destroy', function() {
// Nullify any references that might hold onto a DOM tree.
$someCachedElement = null;
$someOtherThing = null;
// Make sure you're unsubscribing from any custom services you've written that
// might also be referencing your directive elements.
someService.remove($scope);
// Maybe you used a jQuery plugin on $el. Hopefully it has a destroy method.
$el.somePlugin('destroy');
});
但总的来说,这与我对传统 SPA 的建议相同;任何与 DOM 交互的组件/模块/类都应该具有执行此类操作的拆解。理想情况下,测试证明拆卸总是在您期望的时候触发。 :)
关于javascript - Angular.js 和 JavaScript 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271661/