构建方法中声明小部件的性能

问题描述 投票:0回答:1

我在堆栈溢出上看到了这篇文章

widget函数和类的性能差异

哪里

class Option2 extends StatelessWidget {
  const Option2();

  Widget createDummyWidget() {
    return const Dummy();
  }

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      child: createDummyWidget(),
    );
  }
}

对性能有影响,因为它可能导致不必要的重建。但我想知道我是否有

class Option2 extends StatelessWidget {
  const Option2();

  @override
  Widget build(BuildContext context) {
    final myNonConstantWidget = Dummy();

    return SizedBox(
      child: myNonConstantWidget,
    );
  }
}

这会对性能产生同样的负面影响(进行那些不需要的重建)吗?或者它只是一个表演者

class Option2 extends StatelessWidget {
  const Option2();

  @override
  Widget build(BuildContext context) {    
    return SizedBox(
      child: Dummy(),
    );
  }
}

因为我在 Flutter 自己的小部件中经常看到这种情况发生,所以我认为它不会对性能产生负面影响。

flutter performance widget rebuild
1个回答
0
投票

所有 3 个样本的性能实际上相同。

您在问题中提到的性能问题是关于

StatefulWidget
的,当
_counter
变量被修改时,整个小部件将被重建。

提取方法本身对性能没有负面影响,但它会使代码更难阅读,并且在

StatefulWidget
的上下文中,它可能会导致您无法跟踪真正需要重建的内容。

在这种情况下,flutter (dart) 建议采取最有利于代码可读性的做法,而不用担心编译器将如何处理您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.