javascript - Angular 1.x 迁移性能问题

标签 javascript angularjs performance

我正在将一个巨大的 angular 1 项目从 1.3.x 升级到 1.6.x,因为我们需要最新版本中的一些补丁。更新后,整个应用程序似乎已显着变慢。我一直在查看迁移文档,但是否有任何可能导致严重减速的因素?任何会导致这种情况的错误代码或陷阱?我遇到的问题只是视觉变化,例如 ng-show 和 ng-hide 缓慢而紧张。

这是升级前的 CPU 配置文件: CPU profile before

这是升级后的 CPU 配置文件: CPU profile after

谢谢!

编辑:

让我提供更多背景信息。我觉得这与摘要周期有关。例如,我有一个导航栏,其中一个图标将隐藏,另一个将在悬停时显示。

这是 Angular 1.3 中的样子 1.3 cpu

这是 Angular 1.6 中的样子 enter image description here

我在更新后收到强制回流性能警告。这(重新计算样式)也来自 angular-animate 的 computeCssStyles 函数(或者至少这是它引导我的代码行)。我也没有在我的代码中调用任何 $animate 。这只是 Angular 摘要方法的产物吗?迁移文档中是否还缺少有关摘要可能更改的任何内容?

代码示例: showDropdown 在悬停时从 false 变为 true,反之亦然。

<i> ng-show="! showDropdown" </i><i> ng-show="showDropdown" </i>

编辑: 短期修复,因为我没有在我的代码中的任何地方使用动画,但它似乎按照更新的 Angular 摘要方法触发。我只是禁用动画作为部分短期修复。

$animate.enabled(false);

最佳答案

在 JavaScript 中管理内存很困难。这里有一些最佳实践来提高加载页面和释放内存方面的性能。

  • 手动删除分离节点 - 继续删除分离对象。
var myNode = document.getElementById("bodyPanel");
  if(myNode !== null){
    while (myNode.firstChild) {
    myNode.removeChild(myNode.firstChild);
  }
}
  • 在每次页面切换时,在 Angularjs Controller 中调用 destroy。还有 javaScript 对象 Reference to null
$scope.$on("$destroy",function() {
  $window.off("resize.Viewport");
});
  • 创建 Angular js 服务以将重要数据保存在内存中,以避免从 HTML5 存储系统中获取数据。

  • 如评论中所述,使用 ng-if 而不是 ng-show

关于javascript - Angular 1.x 迁移性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42866062/

相关文章:

javascript - 无法让 ngRoute 正确路由

javascript - HighCharts - 数据点未出现

javascript - 令人难以置信的循环功能

javascript - 我如何访问 Angular JS 中 .then() 中定义的 $scope 数组?

javascript - 在 Angular ng-options 上选择的 bool 值

MySQL使用一条Insert语句代替游标循环

javascript - 登录后无法重定向用户

javascript - 单击复选框时从 json 中删除第一个对象 - AngularJs + NodeJs

performance - ssl 对网络服务器的影响

performance - 为什么 JIT 语言仍然比原生 C/C++ 更慢且内存效率更低?