javascript - Angular.js 和 JavaScript 管理

标签 javascript jquery angularjs

我最近使用 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/

相关文章:

JQuery UI .sortable 按钮可从当前列表中删除并返回到原始列表

angularjs - Angular 模块 'cordovaHTTP' 不可用

javascript - 使用 JavaScript 从 API 加载 JSON 文件

javascript - jQuery 选择除一个 ID 之外的所有类

javascript - 为什么选择 MDC 选择 :change is not working with javascript for material design

jquery - 如何防止 anchor 点击跳转?

javascript - Angular $http 在登录后为每个请求设置 cookie

angularjs - Angular.Dart 教程的错误

javascript - 将两个或多个 JSON 对象数组合并到一个数组中,保持唯一性

Javascript 事件监听器在对象方法中不起作用