用setState() Package 整个函数和只 Package 实际更改有什么区别吗?
- Package 整个函数
setState(() {
if (switchValueAdd) {
valueAdd.text = (int.parse(num1) + int.parse(num2)).toString();
} else {
valueAdd.text = '';
}
});
1.仅 Package 实际更改
if (switchValueAdd) {
setState(() {
valueAdd.text = (int.parse(num1) + int.parse(num2)).toString();
});
} else {
setState(() {
valueAdd.text = '';
});
}
以上两个代码片段在性能上有什么不同吗?如有帮助,将不胜感激!
另外,对于if-else语句,“else”是否与“if”占用同样多的内存?换句话说,“else”是否基本上与“if”相同,只是检查“else”是否为真?
提前感谢您的努力和时间!
3条答案
按热度按时间efzxgjgh1#
setState
只在一种情况下调用(从if或else调用,而不是同时从两者调用)。但是,如果您必须编写可读代码,请使用第一个变量,因为它更具可读性。And语句不是高性能操作。您还可以简化精简:
u3r8eeie2#
你可以在执行完函数的所有代码后刷新状态,这样可以减少多次刷新,提高应用程序的性能。
x6h2sr283#
从功能上讲,将非异步代码放在setState内部或外部将导致非常接近的结果。您应该尽量避免在setState中使用大量代码块,因为这可能难以读取。
如果你看一下
setState
方法的源代码,它只是调用函数和做一些Assert,所以如果你对它做同样数量的调用,它应该没有任何明显的区别。理论上,如果你从闭包内部访问局部变量,它可能会稍微慢一点。因为这些变量(或者至少是对它们的引用)可能需要通过堆栈复制到函数中,但是将导致的实际开销将需要对用于各种平台的dart编译器有更全面理解的人来充分研究。实际上,就实际的性能而言,这不太可能有什么影响,因为您的代码中可能还有其他优化,它们会导致比这大得多的性能差异。
此外,从
setState
documentation:通常建议setState方法只用于 Package 实际的状态更改,而不是 Package 可能与更改关联的任何计算。例如,这里构建函数使用的值递增,然后更改写入磁盘,但只有增量 Package 在setState中:
在这种情况下,我会更多地关注易读性-无论哪个版本你觉得更容易阅读,都可能是最适合你的版本。
我可能会这样写: