【问题标题】:Benchmarking Change Detection in AngularDartAngularDart 中的基准变更检测
【发布时间】:2014-04-16 12:28:15
【问题描述】:

在几个版本之前,AngularDart 中添加了新的更改检测机制。我正在尝试编写一个简单的基准来将新算法与之前使用的算法进行比较。

这是我想出的:

    class User {
      String firstName;
      String lastName;

      User(this.firstName, this.lastName);
    }

    class Benchmark extends BenchmarkBase {
      TestBed tb;
      Scope s;

      Benchmark(this.tb) : super("Benchmark");

      void warmup() {
        times(20, (_){ tb.rootScope.apply(); });
      }

      void exercise() {
        times(20, (_){ tb.rootScope.apply(); });
      }

      setup() {
        s = tb.rootScope.createChild({});
        times(10000, (i) {
          final user = new User("First ${i}", "Last ${i}");
          s.context["user${i}"] = user;
          s.watch("user${i}.firstName", noop);
        });
      }
    }

我为 Angular 0.9.10 运行了这个测试,并为 Angular 0.9.4 运行了类似的测试。令人惊讶的是,Angular 0.9.4 的速度要快一些。我的基准是不是太天真了?

【问题讨论】:

  • AngualarDart 团队也应该提供一些基准代码。你检查过 GitHub 存储库吗?我阅读了一些关于对变更检测进行基准测试的讨论,但我自己还没有看到代码(虽然还没有寻找它)。
  • @victor-savkin 我不确定是否真的有问题,但我注意到的第一件事是,我认为跑步锻炼 20 次是不够的。你可能想要至少 2000 年。
  • @markovuksanovic 谢谢。在我提高数字后,新算法比旧算法更快。不是很多(大约 10%)。
  • @GünterZöchbauer 谢谢,我去看看回购。

标签: dart angular-dart


【解决方案1】:

在此处查看我们的基准测试:https://github.com/angular/angular.dart/blob/master/perf/watch_group_perf.dart

您的用例应该大致相同,因为他们的用例受到字段取消引用速度的限制。真正的好处来自新算法的最小 GC 压力。

【讨论】:

  • 链接现在好像坏了。
猜你喜欢
  • 2018-07-14
  • 2017-11-07
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多