← Назад к вопросам
Какие знаешь инструменты для для анализа performance?
2.2 Middle🔥 161 комментариев
#Flutter виджеты#Тестирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие знаешь инструменты для анализа performance
Для оптимизации Flutter приложений существует множество встроенных и сторонних инструментов анализа производительности. Рассмотрю самые эффективные.
1. DevTools — встроенное решение Flutter
Главный инструмент для анализа performance.
# Запустить приложение с профилированием
flutter run --profile
# Откроется DevTools в браузере
http://localhost:9100
Memory Tab (анализ памяти)
// Плохо — утечка памяти
class BadWidget extends StatefulWidget {
@override
State createState() => _BadWidgetState();
}
class _BadWidgetState extends State<BadWidget> {
StreamSubscription? sub;
@override
void initState() {
super.initState();
sub = stream.listen((_) {}); // Забыли отписаться!
}
@override
void dispose() {
// sub?.cancel(); // ❌ Забыли
super.dispose();
}
}
В DevTools → Memory видны:
- Размер Heap
- Garbage Collection события
- Утечки памяти
Performance Tab (производительность)
- Frame Rate — FPS (60 FPS идеально)
- Jank — пропуск кадров (плохо)
- Build time — время перестройки UI
- Paint time — время рисования
CPU Tab (использование CPU)
- Какие методы занимают больше всего времени
- Call stack анализ
- Time breakdown
2. Profiler API — программный анализ
import 'dart:developer' as developer;
class PerformanceMonitor {
static void analyzeOperation(String name, Future Function() operation) async {
final timeline = developer.Timeline.startSync(name);
try {
await operation();
} finally {
timeline.finishSync();
}
}
static void measureBuild() {
developer.Timeline.instantSync('build_started');
// ... код ...
developer.Timeline.instantSync('build_finished');
}
}
// Использование
PerformanceMonitor.analyzeOperation('fetch_data', () async {
await api.fetchData();
});
3. Flutter Benchmark — тестирование производительности
# Создание benchmark теста
flutter test --profile
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Performance', () {
testWidgets('List build performance', (tester) async {
final watch = Stopwatch()..start();
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: ListView.builder(
itemCount: 1000,
itemBuilder: (context, index) => ListTile(
title: Text('Item $index'),
),
),
),
),
);
watch.stop();
expect(watch.elapsedMilliseconds, lessThan(1000));
});
});
}
4. Dart Observatory (VM Service)
Низкоуровневый анализ работы Dart VM.
# Получить URL Observatory
flutter run -v | grep "Observatory"
Возможности:
- CPU профилирование
- Memory анализ
- GC статистика
- Isolate мониторинг
5. Lighthouse для веб-версии
# Если приложение работает как веб
flutter build web
# Проверить в Chrome DevTools → Lighthouse
6. Custom Performance Monitoring
class PerformanceTracker {
static final _metrics = <String, List<Duration>>{};
static Future<T> track<T>(String name, Future<T> Function() fn) async {
final stopwatch = Stopwatch()..start();
try {
return await fn();
} finally {
stopwatch.stop();
_metrics.putIfAbsent(name, () => []).add(stopwatch.elapsed);
// Логирование
_logMetric(name, stopwatch.elapsed);
}
}
static void _logMetric(String name, Duration duration) {
print('$name: ${duration.inMilliseconds}ms');
}
static Map<String, double> getAverages() {
return _metrics.map(
(name, durations) => MapEntry(
name,
durations.fold<int>(0, (sum, d) => sum + d.inMilliseconds) /
durations.length,
),
);
}
}
// Использование
await PerformanceTracker.track('api_call', () => api.fetchUsers());
await PerformanceTracker.track('database_query', () => db.getAllUsers());
print(PerformanceTracker.getAverages());
// Вывод: {api_call: 234.5, database_query: 12.3}
7. Leak Canary (для Android)
Анализ утечек памяти в нативном коде.
# Добавить в build.gradle
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
}
8. Android Profiler
Для нативной части приложения:
# Запустить в Android Studio
# View → Tool Windows → Profiler
Анализирует:
- CPU использование
- Memory leak
- GPU рендеринг
- Battery drain
- Network
Практический пример оптимизации
// ❌ Плохая производительность
class BadListView extends StatelessWidget {
final List<User> users = List.generate(10000, (i) => User(id: i));
@override
Widget build(BuildContext context) {
return ListView(
children: [
...users.map((user) => UserTile(user: user)), // Все элементы в памяти!
],
);
}
}
// ✅ Хорошая производительность
class GoodListView extends StatelessWidget {
final List<User> users = List.generate(10000, (i) => User(id: i));
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) => UserTile(user: users[index]),
);
}
}
Чек-лист оптимизации
- DevTools Memory — нет утечек памяти?
- DevTools Performance — 60 FPS?
- DevTools CPU — нет долгих операций?
- Build time — < 1000ms на rebuild?
- Paint time — < 16ms (60fps = 16ms per frame)?
- ListView — использую builder вместо children?
- Images — кеширую картинки?
- Animations — использую SingleTickerProviderStateMixin?
- State — правильно структурирую состояние?
- Disposable — очищаю ресурсы в dispose()?
Типичные проблемы и решения
Проблема | Решение
--------------------|------------------------
Wide builds | Использовать const widgets
Jank | Переместить вычисления в background
Memory leak | Disposed все в dispose()
Low FPS | Оптимизировать build() метод
Large bundle size | Tree-shake, проверить assets
Slow app start | Ленивая инициализация
Правильное использование этих инструментов позволяет создавать высокопроизводительные приложения Flutter.