全局变量的最佳实践和性能

Ama*_*ite 0 performance dart flutter

我需要存储一些应在我的应用程序中到处可用的数据。到目前为止,我知道执行此操作的三种方法:

我想知道哪种解决方案(或我不知道的另一种解决方案)在性能方面最容易实现。

mag*_*n94 5

一种InheritedWidget可能是最好和更清洁的方法,因为:

  • 它为您提供了对变量进行范围界定的优势(我知道,您需要全局变量,所以暂时不关心您)。
  • 您可以在某些情况下通过进行重建updateShouldNotify。重建时,InheritedWidget您将重建引用其属性的所有小部件。
  • 它比全局变量更干净,因为您对它们有更多的控制权,还可以实现一些利用某些私有变量的“全局”方法。毕竟这仍然是一堂课。
  • O(1)自从Flutter索引InheritedWidget实现以来,访问具有复杂性,从而允许通过中的ancestorInheritedElementForWidgetOfExactType方法进行有效访问context

就是说,这SharedPreferences是一个很大的问题,因为您要执行大量的磁盘I / O,与在RAM中进行操作相比,其性能要差很多。另外,您将需要大量样板来管理变量的临时性质。

至于全局变量,我认为它们不能为您提供与an一样的敏捷性,InheritedWidget并且我认为它们不是一个好习惯。

谈到InheritedWidget,对于“动态”的东西,您可能不会简单地使用它,因为它的变量应该是不可变的(类被标记为immutable,因此您的所有成员都应该是最终的)。

解决此问题的一种干净方法在此处已得到很好的说明。基本上AppState是您的全局变量。

@RémiRousselet指出的EDIT告诉您,ancestorInheritedElementForWidgetOfExactType具有O(1)复杂性有点麻烦,因为查找是在上进行的,在最坏的情况下,最好的情况下HashMap具有O(1)复杂性O(n)

这仍然是一种有效的方法,因为它不会遍历整个小部件树来寻找它。

  • InheritedWidgets 的 O(1) 有点谎言。它不会遍历小部件树,但仍然会查找哈希映射。但是,是的,我会一直使用 InheritedWidgets 而不是全局变量。 (2认同)