使用测试0.12.15 + 3 lib在飞镖中进行性能测试

时间:2016-08-12 12:55:34

标签: dart performance-testing

我们在Dart开发了一个计算密集型的网络应用程序 为了确保我们的计算在所有平台和浏览器中都能很好地运行,我们使用"测试0.12.15 + 3"来运行基准测试。包。但是,我们发现在某些情况下,执行相同代码的差异会有几个数量级的差异。下面是演示该问题的代码(使用自定义比较器对数组进行排序)。

我想知道是否有关于在chrome中执行的代码之间的时间差异的解释,以及选择chrome作为平台的测试(pub run test -p chrome test / perf_test.dart)?  通过测试包进行基准测试是一个可行的选择,还是我们应该寻找其他地方?

import 'package:quiver/iterables.dart' as it;
void main(){
 Stopwatch sw = new Stopwatch();
 int len = 1000000;//0000
 num v = 0;
 List ln0 = new List();
 for(int i = 0; i < len; i++)
  ln0.add(v++);
 //T1
 sw..reset()..start();
 ln0.sort((x,y) => x - y);
 sw..stop();
 print('Num Comparator take, mcs: ${sw.elapsedMicroseconds}');
 //T2
 List ln1= it.range(len).toList();
 sw..reset()..start();
 ln1.sort((x,y) => x - y);
 print('Suddenly, Num Comparator take, mcs: ${sw.elapsedMicroseconds}');

 //T3
 List li2 = it.range(len).map((numm)=>numm.toInt()).toList();
 sw..reset()..start();
 li2.sort((x,y)=>x - y);
 sw..stop();
 print('Int Comparator take, mcs: ${sw.elapsedMicroseconds}');

 List<String> items = new List(len);
 for(int i =0, len = items.length; i<len; i++){
  List tl = ['a','b','c','d','e','f','g','h','i','j','']..shuffle();
  items[i] = tl.join('');
 }

 Function _comparer = (String s1, String s2) {
  if (s1 == null && s2 == null) return 0;
  if (s1 == null) return 1;
  if (s2 == null) return -1;
  if (s1 == '' && s2 == '') return 0;
  if (s1 == '') return 1;
  if (s2 == '') return -1;
  return s1.compareTo(s2);
 };
 //T4
 List ls1 = new List.from(items);
 sw..reset()..start();
 ls1.sort((s1, s2) => s1.compareTo(s2));
 sw..stop();
 print('Standart String comparator take, mcs: ${sw.elapsedMicroseconds}');

 //T5
 List ls2 = new List.from(items);
 sw..reset()..start();
 ls2.sort(_comparer);
 sw..stop();
 print('String comparator(miss null,empty) take, mcs:    ${sw.elapsedMicroseconds}');
 }

1 个答案:

答案 0 :(得分:1)

test不应该用于基准测试。使用insted https://pub.dartlang.org/packages/benchmark_harness。它有助于应对基准相关的要求,如预热阶段和运行次数,以获得更真实的结果。