我是否需要在发布flutter VM中缓存Dart属性结果以获得最佳性能?
它的dartpad,缓存将提高性能。
class Piggybank {
List<num> moneys = [];
Piggybank();
save(num amt) {
moneys.add(amt);
}
num get total {
print('counting...');
return moneys.reduce((x, y) => x + y);
}
String get whoAmI {
return total < 10 ? 'poor' : total < 10000 ? 'ok' : 'rich';
}
String get uberWhoAmI {
num _total = total;
return _total < 10 ? 'poor' : _total < 10000 ? 'ok' : 'rich';
}
}
void main() {
var bank = new Piggybank();
new List<num>.generate(10000, (i) => i + 1.0)..forEach((x) => bank.save(x));
print('Me? ${bank.whoAmI}');
print('Me cool? ${bank.uberWhoAmI}');
}
结果
counting...
counting...
Me? rich
counting...
Me cool? rich
属性方法是无副作用。
答案 0 :(得分:4)
这完全取决于计算的成本以及从财产中请求结果的频率。
如果你真的想要缓存
,Dart有很好的缓存语法 num _total;
num get total {
print('counting...');
return _total ??= moneys.reduce((x, y) => x + y);
}
String _whoAmI;
String get whoAmI =>
_whoAmI ??= total < 10 ? 'poor' : total < 10000 ? 'ok' : 'rich';
String _uberWhoAmI;
String get uberWhoAmI =>
_uberWhoAmI ??= total < 10 ? 'poor' : _total < 10000 ? 'ok' : 'rich';
要重置缓存,因为结果所依赖的某些值已更改,只需将其设置为null
save(num amt) {
moneys.add(amt);
_total = null;
_whoAmI = null;
_uberWhoAmI = null;
}
,下次访问属性时,将重新计算值。