runable
This commit is contained in:
230
lib/core/constants/performance_constants.dart
Normal file
230
lib/core/constants/performance_constants.dart
Normal file
@@ -0,0 +1,230 @@
|
||||
/// Performance-related constants for the retail POS app
|
||||
///
|
||||
/// This file contains all performance tuning parameters:
|
||||
/// - List/Grid performance settings
|
||||
/// - Cache configurations
|
||||
/// - Debounce/Throttle timings
|
||||
/// - Memory limits
|
||||
/// - Scroll performance settings
|
||||
|
||||
class PerformanceConstants {
|
||||
// Private constructor to prevent instantiation
|
||||
PerformanceConstants._();
|
||||
|
||||
// ==================== List/Grid Performance ====================
|
||||
|
||||
/// Cache extent for ListView/GridView (pixels to preload)
|
||||
static const double listCacheExtent = 500.0;
|
||||
|
||||
/// Number of items to preload in infinite scroll
|
||||
static const int preloadItemThreshold = 5;
|
||||
|
||||
/// Maximum items to render at once in very large lists
|
||||
static const int maxVisibleItems = 100;
|
||||
|
||||
/// Grid crossAxisCount for different screen widths
|
||||
static int getGridColumnCount(double screenWidth) {
|
||||
if (screenWidth < 600) return 2; // Mobile portrait
|
||||
if (screenWidth < 900) return 3; // Mobile landscape / Small tablet
|
||||
if (screenWidth < 1200) return 4; // Tablet
|
||||
return 5; // Desktop
|
||||
}
|
||||
|
||||
/// Grid childAspectRatio for product cards
|
||||
static const double productCardAspectRatio = 0.75;
|
||||
|
||||
/// Grid childAspectRatio for category cards
|
||||
static const double categoryCardAspectRatio = 1.0;
|
||||
|
||||
/// Grid spacing
|
||||
static const double gridSpacing = 12.0;
|
||||
|
||||
// ==================== Debounce/Throttle Timings ====================
|
||||
|
||||
/// Search input debounce (ms) - wait before executing search
|
||||
static const int searchDebounceDuration = 300;
|
||||
|
||||
/// Filter input debounce (ms)
|
||||
static const int filterDebounceDuration = 200;
|
||||
|
||||
/// Auto-save debounce (ms)
|
||||
static const int autoSaveDebounceDuration = 1000;
|
||||
|
||||
/// Scroll position throttle (ms)
|
||||
static const int scrollThrottleDuration = 100;
|
||||
|
||||
/// Network retry debounce (ms)
|
||||
static const int retryDebounceDuration = 500;
|
||||
|
||||
// ==================== Animation Durations ====================
|
||||
|
||||
/// Standard animation duration
|
||||
static const int animationDuration = 300;
|
||||
|
||||
/// Fast animation duration
|
||||
static const int fastAnimationDuration = 150;
|
||||
|
||||
/// Image fade-in duration
|
||||
static const int imageFadeDuration = 300;
|
||||
|
||||
/// Shimmer animation duration
|
||||
static const int shimmerDuration = 1500;
|
||||
|
||||
// ==================== Memory Management ====================
|
||||
|
||||
/// Maximum image cache size in memory (MB)
|
||||
static const int maxImageMemoryCacheMB = 50;
|
||||
|
||||
/// Maximum image cache count in memory
|
||||
static const int maxImageMemoryCacheCount = 100;
|
||||
|
||||
/// Maximum disk cache size (MB)
|
||||
static const int maxDiskCacheMB = 200;
|
||||
|
||||
/// Database cache size limit (number of items)
|
||||
static const int maxDatabaseCacheItems = 1000;
|
||||
|
||||
// ==================== Network Performance ====================
|
||||
|
||||
/// Network request timeout (seconds)
|
||||
static const int networkTimeoutSeconds = 30;
|
||||
|
||||
/// Network connect timeout (seconds)
|
||||
static const int networkConnectTimeoutSeconds = 15;
|
||||
|
||||
/// Network receive timeout (seconds)
|
||||
static const int networkReceiveTimeoutSeconds = 30;
|
||||
|
||||
/// Maximum concurrent image downloads
|
||||
static const int maxConcurrentImageDownloads = 3;
|
||||
|
||||
/// Retry attempts for failed requests
|
||||
static const int maxRetryAttempts = 3;
|
||||
|
||||
/// Retry delay (seconds)
|
||||
static const int retryDelaySeconds = 2;
|
||||
|
||||
// ==================== Batch Operations ====================
|
||||
|
||||
/// Batch size for database operations
|
||||
static const int databaseBatchSize = 50;
|
||||
|
||||
/// Batch size for image preloading
|
||||
static const int imagePreloadBatchSize = 10;
|
||||
|
||||
/// Pagination page size
|
||||
static const int paginationPageSize = 20;
|
||||
|
||||
// ==================== Build Optimization ====================
|
||||
|
||||
/// Whether to use RepaintBoundary for grid items
|
||||
static const bool useRepaintBoundaryForGridItems = true;
|
||||
|
||||
/// Whether to use const constructors aggressively
|
||||
static const bool useConstConstructors = true;
|
||||
|
||||
/// Whether to enable performance overlay in debug mode
|
||||
static const bool enablePerformanceOverlay = false;
|
||||
|
||||
// ==================== Hive Database Performance ====================
|
||||
|
||||
/// Compact database after this many operations
|
||||
static const int databaseCompactThreshold = 100;
|
||||
|
||||
/// Use lazy box for large datasets
|
||||
static const bool useLazyBoxForProducts = true;
|
||||
|
||||
/// Cache database queries
|
||||
static const bool cacheQueries = true;
|
||||
|
||||
/// Maximum database file size (MB) before warning
|
||||
static const int maxDatabaseSizeMB = 100;
|
||||
|
||||
// ==================== Scroll Performance ====================
|
||||
|
||||
/// Physics for better scroll performance
|
||||
static const bool useBouncingScrollPhysics = true;
|
||||
|
||||
/// Scroll controller jump threshold (prevent jarring jumps)
|
||||
static const double scrollJumpThreshold = 1000.0;
|
||||
|
||||
/// Enable scroll momentum
|
||||
static const bool enableScrollMomentum = true;
|
||||
|
||||
// ==================== State Management Performance ====================
|
||||
|
||||
/// Provider auto-dispose delay (seconds)
|
||||
static const int providerAutoDisposeDelay = 60;
|
||||
|
||||
/// Keep alive duration for cached providers (seconds)
|
||||
static const int providerKeepAliveDuration = 300;
|
||||
|
||||
/// Use provider.select() for granular rebuilds
|
||||
static const bool useGranularRebuild = true;
|
||||
|
||||
// ==================== Image Loading Performance ====================
|
||||
|
||||
/// Image loading placeholder height
|
||||
static const double placeholderHeight = 200.0;
|
||||
|
||||
/// Use progressive JPEG loading
|
||||
static const bool useProgressiveLoading = true;
|
||||
|
||||
/// Preload images for next page
|
||||
static const bool preloadNextPageImages = true;
|
||||
|
||||
/// Maximum image resolution (width x height)
|
||||
static const int maxImageWidth = 1920;
|
||||
static const int maxImageHeight = 1920;
|
||||
|
||||
// ==================== Frame Rate Targets ====================
|
||||
|
||||
/// Target frame rate
|
||||
static const int targetFPS = 60;
|
||||
|
||||
/// Budget per frame (milliseconds)
|
||||
static const double frameBudgetMs = 16.67; // 60 FPS
|
||||
|
||||
/// Warning threshold for long frames (ms)
|
||||
static const double longFrameThresholdMs = 32.0;
|
||||
|
||||
// ==================== Cart Performance ====================
|
||||
|
||||
/// Maximum cart items before pagination
|
||||
static const int maxCartItemsBeforePagination = 50;
|
||||
|
||||
/// Cart calculation debounce (ms)
|
||||
static const int cartCalculationDebounce = 100;
|
||||
|
||||
// ==================== Responsive Breakpoints ====================
|
||||
|
||||
/// Mobile breakpoint
|
||||
static const double mobileBreakpoint = 600.0;
|
||||
|
||||
/// Tablet breakpoint
|
||||
static const double tabletBreakpoint = 900.0;
|
||||
|
||||
/// Desktop breakpoint
|
||||
static const double desktopBreakpoint = 1200.0;
|
||||
|
||||
// ==================== Helper Methods ====================
|
||||
|
||||
/// Get appropriate cache extent based on device
|
||||
static double getCacheExtent(double screenHeight) {
|
||||
// Cache 1.5x screen height
|
||||
return screenHeight * 1.5;
|
||||
}
|
||||
|
||||
/// Get appropriate batch size based on memory
|
||||
static int getDynamicBatchSize(int totalItems) {
|
||||
if (totalItems < 100) return 20;
|
||||
if (totalItems < 500) return 50;
|
||||
if (totalItems < 1000) return 100;
|
||||
return 200;
|
||||
}
|
||||
|
||||
/// Check if device can handle high performance mode
|
||||
static bool shouldUseHighPerformanceMode(double screenWidth) {
|
||||
return screenWidth >= tabletBreakpoint;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user