簡體   English   中英

重寫operator ==是否有助於避免重建?

[英]Does overriding operator== help to avoid rebuilding?

我有一個無狀態的小部件

class Foo extends StatelessWidget {
  final String text;
  A(this.text);
  Widget build(BuildContext _) => Text(text);
}

假設我在窗口小部件樹中的某個地方創建了“ Foo”的實例,並(很少)更改了“文本”。 當然,每當我創建“ Foo”的新實例時,即使它具有相同的“文本”,也會調用其“內部版本”。

引入用於檢查“文本”的“ operator ==”會避免重建嗎?

編輯:在窗口小部件樹中只有一個'Foo'實例,但是它始終是每個父版本的新實例。

編輯:

我想我在'framework.dart'的Flutter代碼庫中找到了該位置:

if (child.widget == newWidget) {
    if (child.slot != newSlot)
      updateSlotForChild(child, newSlot);
    return child;
  }

因此,如果Widget覆蓋了'operator ==',則相同Widget類的兩個相等的實例將不會將子樹標記為臟,因此不會觸發子樹“ build”。

因此,覆蓋'operator =='可以幫助優化性能!

有人可以確認嗎?

編輯:

我在GitHub上打開了一張票,請Flutter團隊就小部件樹的重建澄清“相同”還是“相等”還是“相同”。

https://github.com/flutter/flutter/issues/38740

您想知道是否在小部件樹的不同部分中創建2個Foo()實例,並重寫==將確保build()僅被調用一次? 即使您有2個單獨的對象? 我完全懷疑……盡管,我們知道Flutter為所有const實例優化了小部件樹,如果某些父小部件自行重建,則不會重建const Stateless小部件子級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM