搜尋套件、儲存庫與 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

所屬分類

原始碼儲存庫

使用此套件的專案