본문으로 건너뛰기

Capacitor 및 Electron을 위한 앱 성능 최적화

앱 성능 최적화에 대한 실용적인 안내서: Capacitor, Ionic, Electron을 위한

Capacitor 및 Electron을 위한 앱 성능 최적화

사용자가 앱이 느려질 때는 어떤 트리거가 발생하는지 아마도 알고 있을 것입니다. 테스터가 앱이 '느려 보인다'고 말할 때, 지원 팀이 시작 속도가 느려서 리뷰를 전달할 때, 제품 팀이 단순한 목록 스크롤이 특정 안드로이드 기기에서 부드럽게 작동하는지 확인할 때, 사용자가 느려질 때는 어떤 트리거가 발생하는지 아마도 알고 있을 것입니다.

사용자가 앱이 느려질 때는 어떤 트리거가 발생하는지 아마도 알고 있을 것입니다. 테스터가 앱이 '느려 보인다'고 말할 때, 지원 팀이 시작 속도가 느려서 리뷰를 전달할 때, 제품 팀이 단순한 목록 스크롤이 특정 안드로이드 기기에서 부드럽게 작동하는지 확인할 때, 사용자가 느려질 때는 어떤 트리거가 발생하는지 아마도 알고 있을 것입니다.

Capacitor와 Electron 앱에서 성능 문제는 거의 항상 한 층에 국한되지 않습니다. 큰 자바스크립트 번들로 인해 시작 시간이 느려지고, 과도한 렌더링으로 인해 상호 작용이 느려지고, 로그인 후 모든 화면에 영향을 미치는 chattty API가 있습니다. native 플러그인 호출이 잘못된 스레드에서 UI를 마비시킬 수 있습니다. 만약에 단 한 층만 튜닝한다면, 회귀가 다시 나타납니다.

실용적인 앱 성능 최적화 전략은 성능을 제품 기능이자 릴리즈 규칙으로 다루어야 합니다. 또한 호스팅 및 자산 전달을 고려해야 합니다. 특히 사용자가 원본에서 멀리 떨어져 있는 경우에요. 사용자가 호주에서 앱을 사용한다면, 호주 앱 속도에 대한 UpTime Web Hosting을 참고하세요. 호주 앱 속도 호주 앱 속도 성능은 UX 결정과도 밀접하게 관련이 있습니다. 로딩 상태, 전환, 피드백 패턴과 같은 UX 결정이 성능과 함께 움직입니다. 성능과 사용자 경험은 함께 움직입니다.

기본적인 것을 제대로 하려면 고생할 수 있습니다. code 최적화, 효율적인 캐싱, 비동기 로딩과 같은 기술을 사용하면 앱 시작 시간이 최대 40%까지 개선될 수 있습니다. (Goreplay사용자에게 앱 시작 시간은 첫 번째 신뢰할 수 있는 신호입니다. 앱이 빠르게 시작되면 나머지 모든 것이 더 쉬워집니다.

목차

소개

빠른 앱은 약속을 지키는 데 빠르다. 사용자가 탭을 누르면 앱이 열리고 첫 번째 화면이 안정화되고 사용자 인터랙션은 즉각적이다. 느린 앱은 신뢰를 얻기 전에 기다리라고 요구한다.

앱 성능 최적화는 화려한 리뉴얼과 함께 백로그에 위치하지 않아야 한다. 크로스 플랫폼 자바스크립트 앱에서 성능은 유지율, 평점, 전환, 지원 양, 그리고 팀이 각 릴리스를 배포할 때 느끼는 자신감에 영향을 준다. Capacitor 앱의 느린 체크아웃 흐름과 Electron 앱의 느린 설정 창은 다른 증상이지만 동일한 결과를 초래한다. 사용자는 제품에 신뢰를 잃는다.

시작 시간

시작은 첫 번째 handshake입니다. Capacitor에서 시작은 일반적으로 oversized bundles, synchronous initialization, 많은 시작 API 호출, 그리고 첫 번째 화면이 사용 가능하기 전에 작업을 수행하는 플러그인으로 인해 지연됩니다. Electron에서 일반적인 범인은 overweight main process, eager window creation, 그리고 화면이 그려질 때까지 모든 것을 수행하려고 하는 renderer code입니다.

해결책은 거의 영리하지 않습니다. 일반적으로 제약이 필요합니다. code을 적게 로드하고 비중요한 작업을 미루십시오. code을 분할하고 부팅 경로를 단순화하십시오.

런타임 성능

런타임 성능은 사용자가

%smooth

feels

off

feels

사용자는 배터리 소모, 열, 메모리 압박 및 충돌 동작으로 성능을 판단합니다. 화면이 빠르게 로드하지만 메모리를 누출하거나 CPU를 과부하시키면 사용자는 앱이 잘못 구축된 것처럼 느낍니다. 현대적인 지침은 앱 라이프 사이클 내에서 지속적으로 추적되는 핵심 지표로 시작 시간, 충돌률, 응답 시간, 네트워크 오류, 배터리 사용량 및 일일 활성 사용자 수를 포함하여 성능을 구조화하는 네 개의 기둥으로 다루는 대신 오류가 발생한 후에만 디버깅에 의존하지 않습니다. Survicate on continuous application performance monitoring ).

 앱 성능의 네 기둥

성능을 네 개의 기둥으로 다루세요. 만약 하나의 기둥이 약해도 앱은 작동할 수 있지만 사용자는 불안정함을 느낄 것입니다.

시작 시간

시작 시간은 사용자가 화면을 탭했을 때부터 유용한 첫 번째 화면까지 모든 것을 포함합니다. 스플래시 화면의 나타남은 아닙니다. 유용한 화면입니다. __CAPGO_KEEP_0__ 에서, 그 안에는 WebView 부트스트랩, JavaScript 파싱 및 실행, 초기 라우팅 및 앱이 상호 작용할 수 있도록 하기 전에 발생하는 모든 구성 또는 저장소 읽기 작업이 포함됩니다. Electron 에서, 프로세스 시작, 프리로드 스크립트, 렌더러 초기화 및 브라우저 창에서 첫 번째 의미 있는 페인트가 포함됩니다.

Startup time covers everything from tap to useful first screen. Not splash screen appearance. Useful screen. In Capacitor, that includes WebView bootstrap, JavaScript parse and execution, initial routing, and whatever configuration or storage reads happen before the app becomes interactive. In Electron, it includes process startup, preload scripts, renderer initialization, and the first meaningful paint in the browser window.

런타임 성능

이 기둥은

상호 작용 품질 앱 성능의 네 기둥 스크롤이 부드럽게 유지되어야 합니다. 입력이 가시적인 지연 없이 반응해야 합니다. 가상 목록화가 길고 비용이 많이 드는 피드가 비싼 것보다 먼저 작동해야 합니다. 상태 업데이트가 범위가 지정되어야 한다는 것은 한 체크박스 클릭이 전체 화면 tree를 다시 그리는 것을 피해야 한다는 것입니다.

일반적인 런타임 악취는 다음과 같습니다:

  • 긴 메인 쓰레드 작업 이것이 탭, 스크롤, 그리고 페인트를 차단합니다.
  • 불안정한 속성이나 광범위한 상태 구독으로 인해 반복적으로 컴포넌트가 다시 렌더링됩니다. 레이아웃-heavy 속성에 대신 transform과 opacity에 애니메이션 작업을 합니다.
  • 무제한 목록 이것이 한 번에 너무 많은 DOM 노드를 렌더링합니다.
  • 네트워크 효율성 빠른 UI가 캐시가 따뜻할 때는 약한 네트워크 디자인을 숨길 수 있습니다. 실제 사용자는 이를 드러냅니다. 모바일 사용자는 Wi-Fi와 불안정한 셀룰러 간에 이동합니다. 데스크톱 사용자는 Electron에서 작동할 수 있으며 기업 네트워크 또는 VPN 뒤에 있습니다. 만약 앱이 단일 화면을 렌더링하기 위해 여러 종속된 요청이 필요하다면 네트워크가 속도 제한 장치가 됩니다.

Network efficiency

A fast UI on a warm cache can hide a weak network design. Real users expose it. Mobile users move between Wi-Fi and unstable cellular. Desktop users in Electron may sit behind corporate proxies or VPNs. If your app needs several dependent requests to render a single screen, the network becomes the pace car.

요청 형태, 요청 수, 캐시 동작에 대해 생각하라. 좋은 네트워크 성능은 더 적은 라운드 트립, 더 작은 응답, 예측 가능한 재사용으로 나온다.

실용적인 규칙: kritikal 경로상의 모든 요청은 첫 번째 상호 작용 전에 존재하는 이유를 설명해야 한다.

자원 소비 및 안정성

이것은 팀이 낮게 측정하는 기둥이다. 앱은 짧은 테스트 실행에서 괜찮아 보이지만 여전히 메모리 누수, 배경 작업이 너무 자주 실행되거나 특정 플러그인과 장치 조건이 일치할 때 앱이 충돌하는 경우가 있다. 성능은 단지 속도만이 아니다. 시간이 지남에 따라 앱이 건강하게 유지되는지 여부도 중요하다.

좋은 정신 모델은 다음과 같다:

기둥 사용자 경험 일반적인 기술적 원인
시작 시간 “이 앱이 느리게 열립니다.” 큰 번들, 동기화 초기화, 블록킹 플러그인 호출
실행 성능 “스크롤이 부드럽지 않다” 장시간 작업, 다시 렌더링, 레이아웃 충돌
네트워크 효율성 “이 화면이 멈춤” API가 자주 통신, 캐싱이 좋지 않음, 큰 데이터
자원 소비 및 안정성 “이 앱이 배터리를 빨리 소모하거나 충돌한다” 메모리 누수, 배경 작업, 네이티브 미사용

팀은 문제의 근본을 파악하기 위해 첫 번째로 pillar를 사용하여 문제를 해결할 때 더 좋은 결과를 얻습니다. 그렇지 않으면 그들은 JavaScript를 튜닝하기 위해 일주일을 보내고 API 형태 또는 네이티브 브리지 동작으로 인한 문제를 해결합니다.

앱 성능 측정 및 프로파일링 방법

대부분의 성능 오류는 추측으로 시작됩니다. 앱이 “느려 보인다”고 생각하기 때문에 alguien이 번들을 최소화하거나 목록을 조정하거나 메모이제이션을 추가합니다. 때로는 도움이 됩니다. 종종 문제가 어디에 있는지 증명하지 않고 작업을 이동합니다.

프로파일링은 그 문제를 해결합니다. 중급 엔지니어가 '어떤 것을 최적화해야 하나?'라는 질문을 멈추고 'main thread, network, memory graph, 또는 native layer가 무엇을 말해주는지?'라는 질문을 시작하면 훨씬 더 빠르게 됩니다.

재현 가능한 테스트 경로에서 시작하세요.

세 가지 사용자 흐름을 선택하고 그들을 고정하세요. 모든 것을 테스트하지 마세요. 사용자가 매일 접하는 경로만 테스트하세요.

대부분의 Capacitor 앱의 경우 좋은 시작 세트는 다음과 같습니다:

  1. 홈 화면으로冷시작
  2. 로그인 및 첫 번째 데이터 가져오기
  3. 중요한 상호 작용 경로, 예를 들어 긴 목록, 대시보드, 지도, 또는 미디어 화면

Electron의 경우:

  1. 앱 열기까지 준비된 창
  2. 주요 뷰 사이의 탐색
  3. 데스크톱-heavy 경로, 예를 들어 파일 import, 검색, 또는 로컬 인덱싱과 같은 작업

같은 장치 클래스와 빌드 유형에서 동일한 흐름을 실행합니다. 만약 세 개의 변수를 동시에 변경하면 프로파일 데이터가 유용하지 않게 됩니다.

적절한 프로파일러를 사용하세요

웹뷰 및 렌더러 진단의 핵심 도구는 여전히 Chrome DevTools입니다. 성능 추적을 기록하고 길게 실행되는 작업, 반복되는 스타일 재계산, 레이아웃 폭발, 경로 변경 시 스크립트 실행 폭발을 찾으세요. 네트워크 패널은 요청 워터폴, oversized assets, 또는 캐싱이 없는지 여부를 알려줍니다.

Capacitor 앱을 프로파일링할 때, 웹뷰를 원격으로 검사하세요. 브라우저만으로의 앱 버전을 믿지 마세요. 셸은 중요합니다. 플러그인 호출, 시작 순서, 및 장치 제약이 동작을 변경합니다. Capgo의 Capacitor를 사용한 크로스 플랫폼 앱 프로파일링 가이드 Capacitor를 사용한 크로스 플랫폼 앱 프로파일링 가이드 그다음은 네이티브로 가세요. iOS에서는 Xcode Instruments를 사용하여 시간 프로파일러 추적, 메모리 성장, 및 네이티브 호출에 대한 멈춤을 검사하세요. Android에서는 Android Studio Profiler를 사용하여 CPU, 메모리, 네트워크, 및 에너지 패턴을 검사하세요. 이 패턴은 자바스크립트만으로는 명확하게 나타나지 않을 수 있습니다. Electron에서는 Chromium 도구가 많은 것을 처리하지만, 시작 또는 IPC가 의심스럽다면 메인 프로세스 및 프리로드 레이어를 검사해야 합니다.

Xcode Instruments Android Studio Profiler Electron Xcode Instruments Android Studio Profiler

성능 지표와 목표

적용할 수 있는 성능 지표 카드를 유지해야 합니다. 정확한 기준은 앱과 장치 종류에 따라 다르지만.

지표 주요 지표 적절 개선 필요
시작 시간 시작 시간 빠르게 열리고 사용자가 첫 번째 화면에 도달할 수 있는 명백한 지연이 없는 화면 사용자가 명백한 지연을 볼 수 있는 시야가 있는 죽은 시간을 기다립니다.
메인 스레드 작업 런타임 성능 Interaction은 네비게이션 및 입력 중에도 반응합니다. Long tasks는 입력, 스크롤, 또는 페인트를 차단합니다.
스크롤 및 애니메이션의 smoothness 런타임 성능 Motion은 안정적이고 일관적입니다. Jank는 목록, 전환, 또는 제스처에서 나타납니다.
Request water fall 네트워크 효율성 중요한 데이터는 잘 형성된 요청의 작은 수에 도착합니다. 화면은 연쇄 또는 중복된 요청에 의존합니다.
Payload size 네트워크 효율성 필요한 field와 asset만 전송 응답에는 불필요한 데이터 또는 oversized asset가 포함되어 있습니다
메모리 추세 리소스 소비량 및 안정성 메모리가 반복 사용 후 안정됩니다 네비게이션 사이클 후 메모리가 계속 오르락내리락합니다
크래시 및 오류 동작 리소스 소비량 및 안정성 오류가 분리되고 복구 가능합니다 스크린이 갑자기 종료되거나 앱이 예기치 않게 종료됩니다

이 표는 의도적으로 질적인 것입니다. 정확한 기준은 사용자 기반, 대상 기기 및 앱이 모바일-첫 번째 또는 데스크톱-첫 번째인지에 따라 달라집니다. 중요한 것은 일관성입니다. 만약 당신이 앱에서 "좋은" 상태를 설명할 수 없다면, 후에 자동화된 회귀 테스트를 수행할 수 없습니다.

트레이스에서 무엇을 찾을 것인가

몇 가지 서명이 반복적으로 나타납니다:

  • 런칭 직후에 плот한 스크립트 블록이 나타납니다 일반적으로 초기 경로에 너무 많은 code이 있음을 의미합니다.
  • 스크롤 중에 반복적으로 레이아웃과 페인트가 발생합니다 DOM 크기가 너무 크거나 레이아웃을 유발하는 속성이 너무 자주 변경되는 경우입니다.
  • 렌더링 전에 네트워크가 비어있는 간격이 나타납니다 UI가 데이터에 의해 차단되는 경우가 많습니다. 데이터를 지연되거나 점진적으로 로드할 수 있습니다.
  • 화면을 닫은 후에도 메모리가 반환되지 않는 경우 리스너가 유지되는 경우, 캐시된 참조 또는 플러그인 라이프 사이클 문제가 있는 경우입니다.

프로파일이 명확하게 병목 현상을 나타내지 않는 경우, narrower flow를 기록하세요. Broad traces는 답을 소음에 묻힌 채로 숨기기 때문입니다.

프로파일링은 매력적이지 않지만, 실제 앱 성능 최적화와 임의의 청소 작업을 구분하는 것입니다.

프론트 엔드 및 자바 스크립트 최적화 기법

측정 결과 문제가 프론트 엔드 경로에 있는 경우, 가장 영향력 있는 수정은 일반적으로 세 가지 범주로 분류됩니다. 초기 로드량을 줄입니다. 사용자 상호 작용 중 렌더링량을 줄입니다. 불가피한 대기 시간을 제어합니다.

웹 애플리케이션 성능과 속도를 향상시키기 위한 필수적인 프론트 엔드 및 자바스크립트 최적화 기법 6 가지를 나열한 다이어그램입니다.

첫 번째 로드에 필요한 것을 줄입니다.

많은 프로젝트에서 Electron 프로젝트와 함께 첫 번째 번들에는 너무 많은 Capacitor이 포함되어 있습니다. 팀은 차트 라이브러리 하나의 화면에 대해 import하고, 모든 사용자에게 admin 흐름을 전송하고, 첫 번째 경로가 사용 가능해질 때까지 분석, 기능 플래그, 리치 에디터, 옵션 플러그인을 초기화합니다.

시작하세요:

  • code 분할을 사용하세요. 경로별 기능이 필요할 때 로드합니다.
  • 비중요한 모듈을 지연 로드하세요. 보고서, 설정, 도움말 흐름, 또는 거의 사용되지 않는 에디터와 같은 모듈입니다.
  • 자산을 빌드 출력 시 미니파이하고 압축하세요. 비필수 초기화 작업을 지연하세요.
  • __CAPGO_KEEP_0__ 처음 렌더링이 끝나거나 첫 번째 상호 작용이 끝날 때까지 기다립니다.
  • 폴리필과 의존성을 감사합니다. 더 이상 번들 비용을 지불할 가치가 없는 의존성을 제거합니다.

팀이 계속해서 오래된 의존성을 유지하기 때문에 “그것들을 제거하면 문제가 발생할 수 있다”고 말하는 경우, 성능 부채가 계속 누적됩니다. 이것은 더 넓은 유지 관리 문제의 동일한 운영 패턴입니다. CTO Input의 팀이 기술에 대한 통제력을 회복하는 방법에 대한 기사에서 이러한 트레이드 오프를 프레임하는 데 유용합니다. 기술에 대한 통제력을 회복합니다. 강력한 프론트엔드 최적화 패스는 시작 시퀀싱도 포함합니다. 데이터가 조금 더 늦게 도착해도 렌더링을 막지 마세요. 앱 부팅 중에 모든 캐시 버킷을 읽고 정규화하지 마세요. 사용자가 아직 보지 못하는 인터페이스의 일부를 수동으로 수용하지 마세요.

렌더링 작업을浪費하지 마세요.

많은 지연은 불필요한 업데이트에서 오는 것입니다. 추상적인 '느린 자바스크립트'가 아니라.

React의 경우, 종종 불안정한 props, 광범위한 컨텍스트 업데이트 및 렌더링 중에 비싼 작업을 수행하는 컴포넌트가 문제를 일으킵니다. Vue의 경우, 깊은 워치러 또는 너무 광범위하게 스코프된 반응 상태가 문제를 일으킬 수 있습니다. Angular의 경우, 업데이트 이분 탐지 및 템플릿-heavy 목록이 문제가 될 수 있습니다. 업데이트 이분 탐지를 제대로 분리하지 않으면.

유용한 수정 사항은 다음과 같습니다:

길이 있는 목록을 가상화합니다.

  • 성능 최적화 DOM이 보이는 행만 유지한다.
  • 비용이 많이 드는 계산을 메모이즈한다. 재렌더링이 필요하지 않은 계산이다.
  • 부드러운 이벤트를 덜어거나 속도를 조절한다. 검색 입력, 크기 조절, 스크롤 리스너와 같은 노이즈 이벤트
  • DOM 쓰기와 읽기를 batch한다. 레이아웃 쓰레시를 피한다.
  • 변형과 투명도 대신 레이아웃 트리거 프로퍼티를 사용한다. 애니메이션은 레이아웃 트리거 프로퍼티 대신 변형과 투명도를 사용한다.

애니메이션은 제품 경험의 일부이면 성능 작업이 아닌 장식으로 간주하지 말라. 모바일 셸에서 compositing, 레이아웃, 제스처 드라이브 애니메이션에 대한 세부 사항은 매우 중요하다. 애니메이션 성능은 전환들이 고립된 경우 smooth하게 보이지만 전체 앱에서 smooth하지 않은 경우에 Capacitor 앱에서 검토할 가치가 있다. 앱의 애니메이션 성능은 전환들이 고립된 경우 smooth하게 보이지만 전체 앱에서 smooth하지 않은 경우에 검토할 가치가 있다.

이런 팀과 함께 일할 때 실제적인 라인입니다: 제품에 '한 가지 더 widget'를 추가하면 화면이 느려지면 일반적으로 렌더링 아키텍처가 문제가 아니라 단일 widget가 문제입니다.

이러한 전략을 기반으로 하기 위해 이 walkthrough는 시청할 가치가 있습니다.

느린 상태를 통제하십시오.

모든 지연이 제거될 수는 없습니다. 일부 데이터는 원격입니다. 일부 장치 작업은 시간이 걸립니다. 일부 시작 작업은 피할 수 없습니다. 그 때는 지각 성능이 중요합니다.

지각 성능은 실제 속도보다 중요합니다., 그리고 기술적 방법으로는 UI의 스켈레톤, 진행적 로딩, smooth 로딩 인디케이터가 지연의 사용자 경험을 개선할 수 있습니다.지각 성능에 대한 Fresh Consulting).

이 조언은 많은 팀이 알지 못하는 것보다 크로스 플랫폼 앱에서 더 중요합니다. WebView에서 빈 흰색 화면은 깨진 것처럼 보입니다. stable shell에 스켈레톤 레이아웃이 있는 화면은 의도된 것처럼 보입니다. 비활성화된 버튼에 대한 feedback가 없는 화면은 죽은 것처럼 보입니다. 버튼이 확인을 tap하고 진행을 보여주는 화면은 신뢰할 수 있습니다.

로딩 상태를 기능의 일부로 빌드하십시오. 프로파일링이 지연을 드러내면 그 때 추가하지 마십시오.

몇 가지 패턴이 잘 작동합니다:

  • 스켈레톤 UI feed, card, 및 detail 레이아웃에서 모양이 정확한 콘텐츠보다 더 중요할 때
  • 진보적 로딩 위의 콘텐츠가 보이기 전에 두 번째 섹션은 로딩된다.
  • 적극적인 UI 위험도가 낮은 액션에서 앱이 즉시 의도 확인할 수 있는 경우
  • 터치, 스와이프 및 상태 변경을 인식하는 작은 상호작용 실제로 블록이 있는 곳에 가짜 폴리시를 덮어씌우는 것은 작동하지 않는다. 스피너를 화면이 멈췄을 때 위에 겹쳐놓는 것은 속도에 대한 인식이 향상되지 않는다. 그저 멈춤을 문서화한다.

네트워크 요청 및 네이티브 리소스 최적화

프론트엔드 정리도 도움이 되지만, 데이터 PIPELINE 및 네이티브 경계가 불필요한 작업을 수행하는 경우 앱은 여전히 느려 보인다. __CAPGO_KEEP_0__ 및 Electron에서, 두 영역은 '웹 앱 사고'가 너무 일찍 멈추는 곳이다.

Front-end cleanup helps, but plenty of apps still feel slow because the data pipeline and native boundary are doing unnecessary work. In Capacitor and Electron, those two areas are where “web app thinking” often stops too early.

데이터 공급 Chain을 고치세요

보내지 않는 요청은 가장 빠른 요청이다. 두 번째로 빠른 요청은 화면이 필요로 하는 것만 반환하고 안전하게 재사용할 수 있는 요청이다.

Progressive loading

그것이 왜 캐싱热 데이터 및 최소화 패킷 크기를 포함한 캐싱과 최소화 패킷 크기는 매우 효과적인 최적화입니다.. 실제 단계는 고속 읽기 데이터베이스 열을 인덱싱하고, 자주 참조되는 쿼리 결과를 캐싱하고, 부분 응답을 위한 API를 설계하고, GZIP 또는 Brotli를 사용하여 텍스트 패킷을 압축하여 서버 작업과 네트워크 지연을 줄이는 것입니다.Cliffex의 캐싱 및 패킷 최소화에 대한 설명).

앱 팀에게는 일반적으로 몇 가지 구체적인 결정이 필요합니다:

  • 핵심 화면의 호출을 배치하거나 재구성하여 요청 수를 줄입니다. 필요한 field만 반환하는 대신 '아무거나' 반환하지 마십시오.
  • 피드, 검색 결과 및 감사 로그와 같은 피드에 대해 적극적으로 페이징하십시오. 캐시된热 읽기
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
  • __CAPGO_KEEP_2__ __CAPGO_KEEP_0__에서 클라이언트와 서버层에서 데이터 모델이 허용하는 범위 내에서
  • 텍스트 응답을 압축합니다 대형 JSON 블록을 배송하지 않도록 합니다

모바일에서 요청 형태가 많은 백엔드 팀이 예상하지 못하는 만큼 중요합니다. 데스크톱의 광대역 네트워크에서 완벽하게 허용되는 응답은 여전히 통근 열차에서 느려 보일 수 있습니다. API이 항상 전체 중첩 레코드를 반환하지만 화면이 제목, 상태, 및 타임스탬프만 필요할 때, UI는 백엔드 편의성을 위해 비용을 지불합니다.

자연스러운 경계를 존중합니다

Capacitor은 깨끗한 다리를 제공하지만, 다리 건너는 모든 비용이 있습니다. JavaScript가 작은 작업을 위해 반복적으로 원자 code을 호출하면, 지연 시간과 락 경쟁이 발생하여 일반적인 UI 느려짐으로 보일 수 있습니다. Electron도 IPC를 통해 같은 문제를 가지고 있습니다. 렌더러와 메인 프로세스 사이에 너무 많은 작은 메시지가 있으면 모든 것이 느려 보일 수 있습니다.

몇 가지 습관이 도움이 됩니다:

  • 다리 작업을 batch로 처리합니다 짧은 루프에서 반복적으로 플러그인 호출을 하는 대신
  • UI-sensitive 경로에서 가중.native 작업을 오프로드합니다 플랫폼 API가 허용하는 경우
  • 자연스러운 결과를 캐시합니다 view load마다 최신 데이터를 읽지 않아도 되는 것들
  • 플러그인 사용을 선택적으로 하세요 플러그인 품질과 라이프 사이클 관리가 매우 다양하기 때문에
  • 리스너와 구독을 정리하세요 화면이 언마운트되거나 창이 닫히면

Capgo에서 Capacitor에 특별히 주의가 필요합니다. 파일 시스템, 카메라, 위치 정보, 백그라운드 관련 플러그인은 유용하지만, 비트리트한 동기화나 메모리 보존을 유발할 수 있습니다.

Electron 팀은 프리로드 스크립트와 렌더러에 대한 너무 광범위한 접근 권한으로 관련된 함정에 빠집니다. 프리로드가 계속 확장되면 시작 시간과 보안이 모두 나빠집니다. 경계를 좁게 유지하세요. 렌더러가 필요로 하는 것만 노출하고 IPC를 프로파일링하세요. 네트워크 트래픽을 프로파일링하는 것과 마찬가지로.

네이티브 통합은 앱 성능 최적화의 일부입니다. 브리지가 노이즈가 나면, 컴포넌트 메모이제이션만으로도 경험을 개선할 수 없습니다.

CI/CD 및 실시간 업데이트와 함께 성능 자동화

성능 작업은 일반적으로 하나의 이유로 쇠퇴합니다. 팀은 성능을 유지하기 위한 작업을 청소 작업으로 다루기 때문에 그렇습니다. alguien이 앱을 프로파일링하고 몇 가지 번들을 줄이고 목록을 고치고, 그리고 팀은 모두 다음 작업으로 넘어갑니다. 세 개의 릴리즈 후, 시작 시간이 느려지면 다시 nobody가 변경된 경향을 지목할 수 없습니다.

그것은 프로세스 실패입니다. 그것은 엔지니어링의 비밀은 아닙니다.

CI/CD 및 실시간 업데이트와 함께 애플리케이션 성능을 자동화하는 지속적인 성능 사이클을 나타내는 원형 다이어그램

성능을 릴리스 게이트로 변환하세요

가장 단순한 지속 가능한 해결책은 팀이 이미 품질을 신뢰하는 곳에서 성능을 표시하는 것입니다. 그 의미는 CI입니다.

Capacitor 또는 Electron 팀의 유용한 PIPELINE은 일반적으로 다음과 같습니다:

  1. 빌드 아티팩트 검사 번들 크기 변동과 자산 성장
  2. 자동화된 브라우저 수준의 감사 중요한 흐름
  3. 대표적인 기기 또는 러너에서 스모크 프로파일링 시작과 탐색
  4. 성능에 민감한 변경 사항을 언급하는 릴리스 노트기능만 아니라

성능 지출은 복잡하지 않아도 작동할 수 있습니다. 시작하기에 작은 집합으로 시작하세요. 초기 번들 크기. 시작 경로 자산 수. 중요 경로 로드 동작. 가중화된 화면의 한 가지 상호 작용 트레이스. PR이 agreed 한 제한을 초과하면 무시되지 않도록 merge되지 않아야 합니다.

CI/CD는 더 나은 대화도 강제합니다. 특정 기능이 더 큰 의존성을 필요로 한다면, 그 비용은 명확해집니다. 팀은 그 거래의 가치가 있는지, 의존성이 나중에 로드될 수 있는지, 더 가벼운 대안이 있는지 결정할 수 있습니다. pipe line은 안전망이자 협상 도구가 됩니다.

팀이 여전히 이 모든 것을 연결하는 중이라면, 이 Capacitor CI/CD pipe line 설정 가이드 라이브 업데이트 사용하여 자바스크립트 측의 회귀

릴리즈 후에 반응 시간이 포함된 지속적인 성능의 두 번째 절반입니다. 많은 크로스 플랫폼 성능 회귀는 자바스크립트, CSS, 구성, 복사본, 또는 자산 패키징과 같은 곳에 있습니다. 앱 스토어 리뷰 사이클을 기다리며 이 문제를 해결하는 것은 운영적으로 비용이 많이 들고 사용자에게는 frustrate합니다.

라이브 업데이트 워크플로우가 게임을 바꿉니다. 릴리즈가 더 느린 시작 시퀀스를, oversized 웹 자산을, 또는 프론트 엔드 렌더링 회귀를 포함한다면, 팀은 웹层를 빠르게 패치할 수 있습니다. 스토어 승인에 의존하여 네이티브 리빌드를 기다릴 필요가 없습니다.

이 공간에서 하나의 옵션은

__CAPGO_KEEP_0__ 이것은 signed 웹 번들을 Capgo 및 Electron 앱에 제공하며, 대상 채널을 지원하고, CI/CD와 통합하며, 롤백 제어를 포함합니다. 이러한 도구를 신중하게 사용하면, 팀은 성능 수정을 운영적 반응 경로로 다루게 됩니다. roadmap 항목으로만 다루는 것이 아닙니다., which delivers signed web bundles for Capacitor and Electron apps, supports targeted channels, integrates with CI/CD, and includes rollback controls. Used carefully, tools like this let teams treat performance fixes as an operational response path, not only a roadmap item.

베타 또는 좁은 채널에 먼저 배포합니다

  • Ship to beta or a narrow channel first
  • 배포 전후에 사용자 영향 범위 확인
  • JavaScript 관련 버그를 빠르게 수정
  • 자연스러운 릴리즈에 초점을 맞추

빠른 복구 경로가 없는 성능 예산은 사용자가 나쁜 릴리즈로 인해 노출되는 것을 방지하지 못한다.

주된 트레이드 오프는 discipline이다. Live updates는 릴리즈 엔지니어링을 대체하지 않는다. 대신 릴리즈 엔지니어링의 표준을 높인다. 릴리즈 엔지니어링을 위한 버전 규칙, 채널 경계, 사용자에게 릴리즈를 푸시할 수 있는 명확한 책임이 필요하다.

프로덕션 모니터링 및 안전한 롤백

빌드가 배포되기 전에 테스트를 통해 많은 것을 잡을 수 있지만, 실제 사용자 행동, 네트워크 조건, 장치 혼합 등 프로덕션에서 앱이 경험하는 모든 것을 포착하지 못한다. 따라서 앱 성능 최적화에 중점을 둔 팀은 Lighthouse 리포트나 로컬 트레이스만으로는 충분하지 않다. 빌드가 배포된 후에도 계속 모니터링한다.

모니터링은 영향을 받는 사용자를 알려줘야 한다.

기본적인 대시보드는 앱이 느려졌다는 것을 알려준다. 유용한 관찰성은 앱이 느려졌다는 것을 알려주고, 어떤 릴리즈, 장치, 네트워크, 또는 화면이 느려졌고, 어떤 사용자가 느려졌는지 알려준다. 실제 사용자 행동에 대한 지침은 점진적으로 observability 및 tracing을 프로덕션 병목 현상을 찾는 가장 좋은 방법으로 지적하고 있다. 중요한 질문은 앱을 더 빠르게 만드는 것이 아니라, 어떤 릴리즈, 장치, 또는 화면이 특정 사용자의 성능을 저하했는지 알기 위한 것이다.

Real-world guidance increasingly points to observability and tracing as the best way to find production bottlenecks because sampled data can create blind spots. The important question isn’t only how to make the app faster. It’s how to know which release, device, or screen regressed performance for specific users (운영 중의 병목 현상과 추적).

그것은 측정하는 것을 바꿀 것입니다. 화면 수준의 시간 측정, 릴리스 식별자, 장치 컨텍스트, 네트워크 컨텍스트 및 특정 배포 또는 code 경로와 관련된 나쁜 경험을 상호 연결할 수 있는 충분한 추적 가능성을 원합니다. Capacitor 앱의 경우, 종종 WebView 측의 전송성과와 네이티브 충돌 및 장치 신호를 결합하는 것이 의미됩니다. Electron의 경우, 렌더러 문제와 메인 프로세스 동작 및 업데이트 롤아웃 시간과 관련하여 추적할 수 있습니다.

롤백 경로가 지루하고 빠르야 합니다

롤백 전략은 많은 팀이 반드시 준비되지 않았음을 깨닫게 됩니다. 그들은 수정을 배포하는 방법에 대해 계획했습니다. 그러나 빠르게 해로운 것을 멈추는 방법에 대해 계획하지 않았습니다.

롤백 프로세스는 압박하에 쉽게 실행할 수 있어야 합니다. 영웅주의가 없습니다. 여섯 달 전에 somebody가 썼던 커스텀 스크립트도 없습니다. 영향을 받은 사용자가 실제로 되돌아 받을 것인지 여부에 대해 추측하지 마십시오.

안전한 롤백 설정은 일반적으로 다음과 같습니다:

  • 버전 기록 릴리스 채널과 연결
  • 배포가 모든 사용자에게 도달하기 전에 롤백을 중지할 수 있습니다 만약에 하나의 대상 또는 플랫폼만 영향을 받는 경우에는 롤백을 대상으로 할 수 있습니다
  • 운영 중의 병목 현상과 추적 그것은 측정하는 것을 바꿀 것입니다. 화면 수준의 시간 측정, 릴리스 식별자, 장치 컨텍스트, 네트워크 컨텍스트 및 특정 배포 또는 __CAPGO_KEEP_0__ 경로와 관련된 나쁜 경험을 상호 연결할 수 있는 충분한 추적 가능성을 원합니다. __CAPGO_KEEP_1__ 앱의 경우, 종종 WebView 측의 전송성과와 네이티브 충돌 및 장치 신호를 결합하는 것이 의미됩니다. Electron의 경우, 렌더러 문제와 메인 프로세스 동작 및 업데이트 롤아웃 시간과 관련하여 추적할 수 있습니다.
  • 소유권 분명함 재발신자와 재발신을 담당하는 사람
  • 롤백 후 확인 회귀가 멈추었는지 확인하는 것

라이브 업데이트를 사용하는 팀은 롤백 경로가 전진 배포와 같은 수준의 주의를 필요로 합니다. 참고로 업데이트를 위한 워크플로우 가이드는 __CAPGO_KEEP_0__ rollback management with Capgo 제품 출시 성능은 끝나지 않습니다. 새로운 장치가 등장하고 기능이 성장하고 API가 변경되고 릴리즈 압력이 증가합니다. 속도가 빠른 팀은 단순히 한 번만 최적화하는 팀이 아닙니다. 그들은 회귀를 빠르게 감지하고 안전하게 되돌리는 팀입니다.

자주 묻는 질문

페이지/영역: Capgo Builder / 네이티브 클라우드 빌드 제품 페이지. 역할: 섹션 또는 페이지 제목. 메시지 키 `native_build_faq_title` (네이티브 빌드 FAQ 제목). | 페이지/영역: 홈 페이지 문제/해결 섹션. 역할: 섹션 또는 페이지 제목. 페이지 프리미엄 지원.astro에서 볼 수 있습니다. 메시지 키 `ps_faq_title` (Ps FAQ 제목).

작은 팀은 어디서 시작해야 하나

첫 번째 출시 경로, 하나의 무거운 화면, 하나의 릴리즈 체크에서 시작하세요. 첫 번째 날에 거대한 관찰성 프로그램을 구축하지 마세요.

좋은 첫 번째 달은 다음과 같습니다.

  • 실제 중급 전화에서 시작 시간 측정
  • 한 번에 불안한 인터랙션 경로 프로파일
  • 초기 번들을 줄이고 비중요 작업을 지연
  • 번들 성장 또는 키 플로우 회귀에 대한 CI 검사 추가

만약에 그 정도만 잘한다면, “성능에 관심이 있다”는 팀보다 앞서 있을 것이다.

Electron 성능 작업과 Capacitor의 차이는 무엇인가

원칙은 비슷하지만 제약 조건은 다르다.

Capacitor 성능은 모바일 CPU, WebView 동작, 배터리敏감성, 네트워크 불안정성, 네이티브 플러그인 경계에 의해 형성된다. Electron 성능은 프로세스 아키텍처, 프리로드 discipline, IPC 오버헤드, 렌더러 메모리 성장, 데스크톱 패키징 습관에 의해 형성된다. Electron 팀은 강력한 개발 머신에 의해 속임을 당하기 쉽다. 모바일 팀은 더 빠르게 겸손함을 배운다.

라이브 업데이트스는 앱 스토어 릴리스 대신 사용하는가

아니오. 그들은 다른 문제를 해결한다.

스토어 릴리스를 사용하여 네이티브 code 변경, SDK 업그레이드, 권한 변경, 컴파일 셸에 속한 모든 것을 사용하라. 라이브 업데이트스를 사용하여 웹层 수정, JavaScript, CSS, 텍스트, 구성, 자산을 포함하여 릴리스 정책이 허용하는 경우 사용하라.

라이브 업데이트스를 사용하는 오류는, 프로세스가 필요하지 않다고 가정하는 것이다. 그들은 팀이 이미 정상적인 버전 관리, 릴리스 채널, 모니터링, 롤백 discipline을 갖고 있다면 도움이 된다.

성능 프로젝트에서 일반적으로 실패하는 것

성능 최적화에서 가장 자주 실패하는 네 가지

  • 팀은 프로파일링을 하기 전에 최적화합니다
  • 팀은 code에만 집중하고 API 형태를 무시합니다
  • 팀은 배포 시스템 대신 한 번의 릴리스를 고칩니다
  • 팀은 고칠 때 새로운 문제를 일으키면 rollback 경로가 없습니다

가장 빠른 팀은 가장 멋진 프로파일러 스크린샷을 보여주는 팀이 아닙니다. 그들은 regressions을 감지할 수 있고, 그들이 살고, 고치고, 필요할 때 되돌릴 수 있는 책임감 있는 고치기를 할 수 있습니다.


Capacitor 또는 Electron 앱을 배포하는 팀이 JavaScript의 속도와 같은 성능 고정을 앱 스토어 리뷰 사이클보다 빠르게 움직이고 싶다면 Capgo __CAPGO_KEEP_0__

실시간 업데이트 Capacitor 앱

웹-layer 버그가 실시간으로 활성화되면 Capgo를 통해修정 내용을 배포하는 대신 앱 스토어 승인까지 며칠 기다리지 않고, 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로를 유지합니다.

마틴의 인간 지원

시작하기

최신 뉴스

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의 통찰력을 제공합니다.