Flutter 성능 최적화 기술 및 모범 사례

게시 됨: 2023-04-11

Flutter는 단일 코드베이스를 사용하여 시각적으로 매력적이며 기본적으로 컴파일된 애플리케이션을 빌드하는 데 사용되는 강력한 크로스 플랫폼 프레임워크입니다. 이 프레임워크를 사용하여 웹, 모바일 및 데스크톱용 솔루션을 만들 수 있습니다. Flutter는 iOS 및 Android 기기의 앱에 네이티브와 같은 모양과 느낌을 제공합니다. Flutter에는 유연성 및 앱 개발 속도와 같은 수많은 다른 이점이 있습니다. 전 세계 소프트웨어 개발 팀의 사랑을 받고 있습니다.

그러나 이 놀라운 프레임워크에서 최상의 결과를 얻으려면 개발 프로세스 자체에서 Flutter 앱의 성능 튜닝을 관리해야 합니다. 제대로 최적화되지 않은 Flutter 앱은 개발 프로세스 중에 느리고 응답하지 않으며 더 많은 전력을 소비하고 더 많은 시간과 리소스가 필요할 수 있습니다. 이는 사용자 경험과 앱 스토어 등급은 물론 앱 소유자의 예산에도 부정적인 영향을 미칩니다. 그러나 올바른 성능 기술과 전략을 구현하면 원활한 UX를 제공하는 고성능 Flutter 앱을 개발할 수 있습니다. 이 게시물에서는 Flutter 성능 최적화를 위해 따라야 할 모범 사례에 대해 설명합니다.

Flutter 성능 최적화를 위한 모범 사례

함수 대신 위젯 사용

함수 대신 위젯을 사용하는 것은 Flutter 애플리케이션의 성능을 최적화하기 위한 핵심 기술입니다. 함수가 앱의 동작을 정의하고 데이터를 조작하는 반면 위젯은 앱 사용자가 상호 작용하는 UI 구성 요소입니다. 기능 대신 위젯을 사용하는 경우 Flutter 모바일 앱은 시각적으로 매력적인 대화형 UI를 갖게 됩니다.

다음은 Flutter 애플리케이션에서 함수 대신 위젯을 사용하는 방법에 대한 몇 가지 예입니다.

커스텀 위젯 생성

개발자는 일반적으로 UI 조각을 생성하는 기능을 정의합니다. 그러나 UI를 생성하는 더 나은 기술이 있습니다. 즉, 사용자 인터페이스와 해당 동작을 캡슐화하는 사용자 정의 위젯을 빌드하는 것입니다. 이 방법을 사용하면 앱의 다양한 부분에서 위젯을 재사용할 수 있으며 코드가 모듈화되고 유지 관리가 쉬워집니다.

내장 위젯 활용

맞춤 위젯을 만들고 싶지 않다면 Flutter 프레임워크에서 제공하는 매우 다양한 내장 위젯 중에서 선택할 수 있습니다. 이러한 내장 위젯을 활용하면 사용자 지정 코드를 작성하지 않고도 복잡한 인터페이스를 개발할 수 있습니다. 예를 들어 TextField 위젯을 사용하면 텍스트 입력 필드를 만들 수 있고 ListView 위젯을 사용하면 스크롤 가능한 항목 목록을 표시할 수 있습니다.

여러 위젯 결합

더 복잡한 사용자 인터페이스를 만들려면 여러 위젯을 결합하는 것이 좋습니다. 예를 들어 행 또는 열 위젯을 사용하여 여러 위젯을 수평 또는 수직으로 쌓거나 정렬할 수 있습니다.

큰 위젯을 하위 위젯으로 나누기

가능하면 상태 비저장 위젯을 사용하는 것이 좋습니다. 상태가 변경되는 동안 Flutter는 상태 저장 위젯을 다시 그립니다. 이는 개발자가 전체 위젯을 다시 빌드해야 함을 의미합니다. 그리고 빌드 트리의 크기가 큰 경우 다시 빌드하려면 여러 리소스가 필요합니다. 이 문제를 해결하려면 위젯을 모듈식으로 작게 유지하여 빌드 기능의 크기를 최소화하십시오. 즉, 큰 위젯을 더 작은 크기의 하위 위젯으로 나눕니다.

기능 대신 위젯을 사용하면 앱 UI가 더 유연하고 재사용 가능해집니다. 그러나 데이터를 조작하고 앱의 동작을 정의하려면 함수가 필요합니다. 따라서 대부분의 숙련된 Flutter 앱 개발자가 따르는 모범 사례는 위젯과 함께 함수를 사용하는 것입니다.

레이아웃 최적화 및 'const' 키워드 사용

Flutter 애플리케이션 레이아웃의 복잡성은 앱 성능에 영향을 미치는 핵심 요소 중 하나입니다. 중첩된 레이아웃을 사용하지 마십시오. 필요한 경우에만 사용하십시오. 또한 위젯 트리를 가능한 한 얕게 유지해야 합니다.

Flutter 앱 성능을 최적화하기 위해 'const' 키워드를 사용하는 것이 널리 사용됩니다. 맞춤 위젯을 만들거나 내장된 Flutter 위젯을 사용하는 동안 가능한 한 'const' 키워드를 사용하세요. 이렇게 하면 위젯을 변경할 수 없게 됩니다. 위젯을 다시 빌드해야 하는 필요성이 최소화되어 성능이 향상됩니다. 이유는 다음과 같습니다. 'const'를 사용하면 Flutter 개발 환경은 업데이트가 필요한 위젯만 다시 빌드합니다. setState 호출이 발생할 때 위젯에 변경 사항이 없으며 위젯 재구축이 발생하지 않습니다. 또 다른 권장 방법은 CPU 주기를 저장하고 'const' 생성자와 함께 사용하는 것입니다.

비동기 프로그래밍 기술 사용

Flutter 앱 개발 중에 코드가 동기식으로 실행되는지 비동기식으로 실행되는지 확인해야 합니다. 비동기 프로그래밍 기술을 사용하면 기본 스레드 차단을 피할 수 있으며 이는 Flutter 애플리케이션의 응답성을 유지합니다. 그러나 Flutter 앱을 비동기식으로 코딩하는 것은 어렵습니다. 업그레이드 및 디버깅과 같은 작업은 실행하기 어려워집니다. 이 문제를 해결하려면 'Futures' 및 'async/await'와 같은 비동기 프로그래밍 기술을 사용하세요. 예를 들어 'async/await'를 사용하면 Flutter 개발자가 동기식 스타일로 비동기 코드를 작성할 수 있으므로 코드의 가독성과 유지 관리 용이성을 높일 수 있습니다.

Flutter에서 'async/await'를 사용하는 방법을 살펴보세요.

1 단계

'async' 키워드를 사용하여 함수 정의 전에 비동기 함수를 정의합니다.

미래의 fetchData() 비동기 {

// …

}

2 단계

비동기 작업의 결과를 기다리려면 비동기 함수 내에서 await 키워드를 사용하십시오.

미래의 fetchData() 비동기 {

최종 응답 = await http.get('https://example.com/data');

// …

}

여기서 http.get() 함수는 Future를 반환합니다. 이는 완료하는 데 다소 시간이 걸릴 수 있는 비동기 작업을 나타냅니다. await 키워드를 사용하면 프로그램이 계속하기 전에 이 작업의 결과를 기다릴 수 있습니다.

3단계

비동기 함수를 호출할 때 await 키워드를 사용하여 함수가 완료될 때까지 기다립니다.

await fetchData();

await 키워드를 사용하면 프로그램이 다음 코드 줄로 이동하기 전에 fetchData() 함수가 완료될 때까지 기다릴 수 있습니다.

16ms 내에 프레임 빌드 및 렌더링

16ms 이내에 앱에서 프레임을 만들고 렌더링하는 것은 또 다른 일반적인 Flutter 애플리케이션 성능 최적화 기술입니다. 생성 및 렌더링 작업에는 두 개의 별도 스레드가 필요합니다. 이러한 각 작업에는 16ms가 있습니다. 그러나 대기 시간을 피하고 앱의 성능을 높이려면 이 16ms를 8ms로 줄여야 합니다. 이는 8ms 이내에 프레임을 개발하고 8ms 이내에 렌더링하여 총 시간이 16ms를 초과하지 않도록 하는 것을 의미합니다.

요약하면 60Hz 디스플레이에서 16ms 이내에 프레임을 만들고 렌더링합니다. 시간을 낮추면 디스플레이 품질이 저하될 수 있는지 궁금할 수 있습니다. 내 대답은 아니오 야. 프레임 개발 및 렌더링의 총 시간을 16ms로 줄이면 가시성 차이가 발생하지 않습니다. 오히려 장치의 배터리 수명을 개선하고 열 문제를 방지합니다. 이 접근 방식은 또한 더 작은 크기의 장치에서 앱 성능을 상당히 가속화합니다. Flutter 앱의 애니메이션은 매끄럽고 사용자는 즐거운 UX를 경험할 것입니다.

불투명도 사용 제한

불투명도 위젯과 클리핑의 사용을 최소한으로 줄입니다. 불투명도를 사용하면 위젯이 각 프레임 후에 자체적으로 다시 빌드됩니다. 이로 인해 Flutter 애플리케이션의 성능이 저하될 수 있으며 애니메이션이 있는 경우 더욱 그렇습니다. 이러한 시나리오를 방지하려면 불투명도 위젯을 사용하는 대신 불투명도를 이미지에 직접 적용할 수 있습니다. 이렇게 하면 작업 속도가 빨라지고 리소스 사용이 줄어듭니다.

불투명도 위젯을 사용하면 화면에 다른 위젯을 감싸서 숨길 수 있습니다. 많은 사람들이 특정 위젯을 숨기기 위해 불투명도 위젯을 사용합니다. 위젯을 숨기는 방법은 Objective-C와 같은 프로그래밍 언어에서 일반적입니다. 그러나 Flutter에서 너무 오랫동안 화면에 위젯을 숨기는 접근 방식은 비용이 많이 드는 일이 될 수 있습니다. 이 접근 방식에 대한 보다 비용 효율적인 대안이 있습니다. Text 위젯 없이 재구성할 수 있는 방법론을 사용하여 위젯을 숨기는 대신 다시 빌드할 수 있습니다. 그리고 해당 위젯을 화면에 표시하려면 Opacity 대신 Visibility 위젯을 사용할 수 있습니다. 분수 불투명도 값은 포함하지 않습니다. 가시성에는 보이는 것과 보이지 않는 두 가지 상태가 있습니다.

앱 크기 줄이기

개발 팀은 종종 앱 개발 프로세스 중에 여러 패키지, 코드, 위젯 및 스크립트를 사용하게 됩니다. 그러나 이렇게 많은 양의 데이터를 저장하면 메모리를 많이 사용하므로 앱의 성능에 해로울 수 있습니다.

이 문제는 Gradle이라는 도구를 사용하여 해결할 수 있습니다. 이 도구는 앱의 크기를 줄이는 데 도움이 됩니다. 이를 위해 Google에서 도입한 패키징 시스템을 사용할 수도 있습니다. 이 패키징 시스템을 사용하면 Android 앱 번들을 빌드할 수 있습니다. App Bundle을 사용하면 Google Play 스토어에서 원본 코드를 다운로드할 수 있습니다. 여기에서 플랫폼 아키텍처 및 장치와 호환되는 앱을 찾을 수 있습니다.

네트워크 요청 최소화

네트워크 요청 수는 Flutter 앱의 성능에 영향을 줄 수 있습니다. 가능한 한 네트워크 요청을 줄이십시오. 반복되는 네트워크 요청을 피하기 위해 StreamBuilder 또는 FutureBuilder와 같은 캐싱 메커니즘을 사용할 수 있습니다.

효과적인 데이터 구조 사용

Flutter 애플리케이션에서 많은 양의 데이터를 처리해야 하는 경우 맵이나 목록과 같은 거대한 데이터 구조를 사용하지 마세요. 대신 LinkedHashMap 또는 Set과 같은 효율적인 데이터 구조를 사용하는 것이 좋습니다. 이러한 데이터 구조는 성능 및 메모리 사용 측면에서 훨씬 뛰어납니다.

이미지 최적화

이미지는 특히 이미지가 매우 크고 적절하게 최적화되지 않은 경우 성능 문제의 원인이 될 수 있습니다. 이것이 바로 이미지를 압축하고 크기를 적절하게 조정해야 하는 이유입니다. 이를 위해 'flutter_svg'와 같은 도구를 활용할 수 있습니다. 이 도구는 래스터화된 이미지 대신 그래픽을 렌더링하는 데 도움이 됩니다.

Flutter 성능 도구 활용

Flutter는 여러 성능 최적화 도구와 함께 제공됩니다. 이러한 도구를 사용하면 Flutter 앱 개발자가 Flutter 애플리케이션의 성능을 검사하고 향상할 수 있습니다. 예를 들어 Flutter DevTools를 사용하면 CPU 사용률, 메모리 사용량 및 프레임 속도와 같은 메트릭을 기반으로 앱의 성능을 분석하고 시각화할 수 있습니다.

앱 프로파일링 수행

Flutter 성능 테스트는 매우 중요합니다. Dart 코드에서 성능 문제를 식별하기 위해 Flutter 앱을 정기적으로 프로파일링합니다. 이러한 문제의 몇 가지 예는 I/O, 대역폭 및 끊김 현상 부족입니다. 가장 빠른 시일 내에 문제를 해결하십시오. Flutter Observatory와 같은 도구는 비용이 많이 드는 작업을 식별하고 최적화하는 데 도움이 됩니다.

마무리 생각

성능을 위해 Flutter 앱을 최적화하는 것이 중요합니다. 최적화된 Flutter 앱은 기기 호환성을 보장하고 뛰어난 UX를 제공하며 배터리 수명을 절약하고 앱 개발 비용을 최소화하며 앱 스토어 순위를 향상시킵니다. 앞서 언급한 Flutter 성능 최적화 기술은 전 세계 수많은 개발자가 신뢰하는 가장 잘 알려진 방법입니다. 따라서 전문적이고 경험이 풍부한 Flutter 앱 개발 회사와 협력하세요. 유능한 회사가 모범 사례와 현명한 전략에 따라 프로젝트를 실행하여 고성능 Flutter 최종 제품을 제공합니다.