搜索插件、代码仓与 APP 分类

插件详情v3.0.0

memoize

当输入与上一次调用时未改变时,返回函数调用的缓存结果。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
7.8万
喜欢数
33
Pub 分数
130

安装插件

flutter pub add memoize

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

memoize 包是一个 Dart 工具,它根据函数调用的输入参数缓存函数结果。当使用与之前调用相同的参数调用函数时,它会返回缓存的结果而不是重新计算,从而提高昂贵或频繁调用的函数的性能。该包支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。在需要避免重复计算的响应式或有状态的应用程序中,该包特别有用。它可以通过 pub.dev 无缝集成到 Flutter 项目中。

适合场景

  • 缓存昂贵的计算
  • 使用稳定输入优化UI渲染
  • 改进状态管理中的性能
  • 减少冗余的 API 调用
  • 增强数据密集型应用的响应能力
  • 避免动画中的重复计算

主要特点

  • 基于输入相等性的自动缓存
  • 支持异步和同步函数
  • 跨平台兼容性
  • 轻量且易于集成
  • 通过自定义比较器支持复杂类型
  • 所需的最小样板代码

适合对象

  • 开发者优化 Flutter 应用的性能
  • 频繁重新计算的状态管理
  • 具有大量计算逻辑的应用程序
  • 需要快速更新的响应式 UI
  • 使用函数式编程模式的团队

使用建议

  • 内存使用量随缓存大小增加而增加
  • 如果需要,缓存失效必须手动处理
  • 不适用于具有副作用的函数
  • 与可变输入对象配合使用时可能无法正常工作,除非自定义相等性
  • 性能提升取决于函数成本和调用频率

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Memoize

memoize returns cached result of function call when inputs were not changed from previous invocation.

Warning

memoize_dart now supports dart 2.12.0 and null safety since 3.0.0 version.

For 2.0.0 we drop func as dependency. Because it archived and doesn't support dart2.

If you need dart-1.24.3 use 1.4.0 version

Examples

memo1, memo2, ... memo10 compare arguments with == operator:

import 'dart:math';
import 'package:memoize/memoize.dart';

void main() {
  var rect1 = new Rectangle<int>(0, 0, 10, 10);
  var rect2 = new Rectangle<int>(0, 0, 10, 10);

  var func = memo1((Rectangle<int> a) => a.width * a.height);

  print(func(rect1));
  print(func(rect2)); // cached result is returned
}

imemo1, imemo2, ... imemo10 compare arguments with identical function:

import 'dart:math';
import 'package:memoize/memoize.dart';

void main() {
  var rect1 = new Rectangle<int>(0, 0, 10, 10);
  var rect2 = new Rectangle<int>(0, 0, 10, 10);

  var func = imemo1((Rectangle<int> a) => a.width * a.height);

  print(func(rect1));
  print(func(rect1)); // cached - same object instance
  print(func(rect2)); // not cached - different object instance
}

memo0 caches result on first call and can be used as lazy cache:

import 'dart:math';
import 'package:memoize/memoize.dart';

void main() {
  var func = memo0(() => new Rectangle<int>(0, 0, 10, 10));

  print(func());
  print(func()); // cached - same object instance
}

Contributors

所属分类

源码仓库

使用此插件的项目