Hola, Amigos! Перед тем, как перейти к основной теме, освежим знания. Вместо потоков весь код в Dart выполняется внутри изолятов. Каждый изолят обладает собственной кучей памяти, что гарантирует изоляцию состояния между ними. Изоляты позволяют выполнять ресурсоемкие задачи: сложные вычисления, обработка изображений или синтаксический анализ данных в фоновом режиме.
⚠️ Важно помнить, что изоляты взаимодействуют между собой посредством передачи сообщений с использованием SendPort и ReceivePort.
Для создания изолята мы используем
.spawn():// создаем изолят
Isolate isolate = await Isolate.spawn(ownFunction, 'Created');
// отправляем сообщение изоляту
isolate.sendPort.send('From main isolate');
// получаем сообщение из изолята
ReceivePort receivePort = ReceivePort();
isolate.addOnExitListener(receivePort.sendPort);
receivePort.listen((dynamic message) {
print('Received message in main isolate: $message');
});
Flutter Compute — это простая альтернатива изолятам, предназначенная для выполнения ресурсоемких вычислительных задач в отдельном потоке в пределах одного изолята. Одним из преимуществ Compute является автоматическое создание изолята для выполнения функции параллельно с пользовательским интерфейсом.
Функция Compute лучше всего подходит для кратковременных задач, которые не требуют больших вычислительных ресурсов и не требуют обширного взаимодействия с основным изолятом. Примеры функций, которые могут быть выгружены в Compute, включают сортировку списка, преобразование форматов данных или выполнение простых манипуляций с данными.
Future<int> computeFunction(int value) {
return compute(_ownFunction, value);
}Используйте Flutter Isolates и Flutter Compute, чтобы повысить производительность и скорость отклика в приложении Flutter ⚙️
Удачи в разработке! Оставляйте реакцию, если было полезно ⚙️