iOS 성능 최적화 솔루션-약한 네트워크 최적화

1. 아이폰의 취약한 네트워크 환경 구성

 

기존 네트워크 상태 선택

또는 네트워크 상태를 맞춤설정하세요.

설정 매개변수:

각 매개변수의 의미는 대략 다음과 같습니다.

대역폭: 다운링크 대역폭

패킷 손실 시: 다운링크 패킷 손실률

지연: 다운링크 지연(ms)

출력 대역폭: 업스트림 대역폭

아웃 패킷 손실: 업링크 패킷 손실률

출력 지연: 업링크 지연

DNS 지연: DNS 확인 지연 Android는 이 기능을 시뮬레이션하는 방법을 모릅니다.

프로토콜: 프로토콜-선택 사항 모두, IPv4, IPv6

인터페이스: 인터페이스-옵션 ALL, WLAN, 셀룰러

2. 최적화 계획

1. 필요한 현황 제시

1.1. 네트워크 프롬프트 없음

네트워크 상태 변경을 모니터링하고 AFNetworking의 AFNetworkReachabilityStatus를 사용할 수 있습니다.
네트워크 상태가 없으면 사용자에게 알립니다.

1.2. 네트워크 요청을 로드하기 전에 "로딩 애니메이션"을 추가합니다.

MBProgressHUD와 같은

1.3. 네트워크 요청을 로드한 후 네트워크 상태 애니메이션을 제거하고 빈 데이터 처리를 추가해야 합니다. (네트워크 때문인지, 데이터 부족 때문인지 판단)

1.4 상태 전환 알림을 잘 활용하여 인터페이스를 다양하게 변경하세요.

2G, 3G, 4G, 5G, WiFi 등과 같은 다양한 네트워크에서 다양한 상태 다이어그램 스위치 또는 대화형 스위치를 만듭니다.

2. 네트워크 요청 최적화

2.1 가장 적절한 타임아웃 시간 설정

총 읽기 및 쓰기 시간 초과(요청에서 응답까지의 시간 초과), 첫 번째 패킷 시간 초과, 패킷 시간 초과(두 데이터 세그먼트 사이의 시간 초과)에 대한 다양한 계산 계획을 개발하여 시간 초과 판단 속도를 높이고, 대기 시간을 줄이고, 즉시 다시 시작합니다. 가능한 시도. 여기에서 타임아웃은 네트워크 상태에 따라 동적으로 설정할 수도 있습니다. 예를 들어 네트워크 상태가 2G, 3G, 4G, 5G, WiFi일 때 서로 다른 타임아웃을 설정할 수 있습니다.

사용자가 장시간 실행되거나 느린 네트워크 작업을 취소할 수 있습니다.

2.2 다중 하위 모듈 요청의 "지연"

사용자의 대기 허용 오차는 2초를 초과하지 않는다는 원칙에 따라 홈페이지 등 여러 비즈니스 모듈을 함께 제시하는 경우 모든 인터페이스 데이터를 한꺼번에 요청하면 오랜 시간 대기하게 되므로 여러 하위 모듈이 분할될 수 있습니다. 지연" 요청.

  • 우선순위 모듈: 요청된 데이터의 양이 적고 비즈니스가 먼저 표시되어야 합니다.
  • 지연 모듈: 대용량 데이터, 목록과 유사한 여러 데이터 조각, 로딩 애니메이션 배치에 적합, 지속 시간은 사용자가 수용할 수 있는 수준이 높으므로 맨 뒤에 배치하는 것 외에도 페이징 처리 및 지연에 사용할 수 있습니다. 슬라이딩 후 로딩 처리.

2. 3. 고정 모듈에 캐싱 메커니즘 또는 증분 업데이트 메커니즘 추가

홈 페이지 및 특정 1단계 페이지의 데이터 캐시 특정 기간 내에 다시 요청하면 캐시에서 데이터를 직접 읽을 수 있으므로 빈 페이지가 경험에 영향을 미치는 것을 방지할 수도 있습니다.
또는 데이터에 점진적인 변화가 있는지 판단하고, 그렇다면 애니메이션 삽입을 전제로 데이터를 업데이트합니다.

2. 4. 다중 모듈 재장전 작업

여러 모듈과 모듈 간의 상관 관계가 있는 일부 복잡한 페이지와 마찬가지로 여러 모듈에는 여러 요청이 있습니다. 요청이 실패하고 "다시 로드" 버튼을 추가해야 하는 경우 모듈 간의 상관 관계를 방지하기 위해 모든 요청을 다시 요청하는 것이 좋습니다. 데이터가 벗어나거나 UI 레이아웃이 어지러워졌습니다.
따라서 네트워크 요청이 실패한 후 다시 로드되는 버튼/드롭다운 작업이 있는 경우 제안 사항은 다음과 같습니다.

  • 여러 모듈이 다시 요청합니다.
  • 복잡한 UI를 다시 계산합니다.

그 이유는 약한 네트워크 환경에서는 요청한 데이터가 완전하지 않을 수 있고 여러 요청이 데이터의 일부만 가져올 수 있기 때문입니다.대부분의 경우 각 모듈은 서로를 보완합니다.

2.5 예압 설정 "임계값"

UITableView의 현재 위치를 기반으로 이를 전체 UITableView.contentView의 현재 높이로 나누어 네트워크 요청을 시작해야 하는지 결정합니다. 현재 페이지의 70%를 초과하면 새 리소스가 요청되고 데이터가 로드됩니다. ;

2. 6. 요청하는 작업부터 시작하세요.

DNS 쿼리 최적화: DNS 쿼리는 최대한 줄여야 하며, 도메인 이름 하이재킹 및 DNS 오염을 방지하려면 DNS 캐싱을 수행해야 하며, 사용자는 "최적의 액세스 포인트"로 예약되어야 합니다.
데이터 패킷 크기 감소 및 패킷 볼륨 최적화: 압축, 패킷 헤더 간소화, 메시지 병합 등을 통해 데이터 패킷 크기 및 패킷 볼륨을 줄입니다.
ACK 패킷 최적화: 중복 패킷과 ACK 패킷 수의 균형을 유지하여 대기 시간을 줄이고 처리량을 향상시킵니다.

2. 7. 연결 끊김 및 재연결

무선 네트워크에서 데이터 연결이 끊어지는 데에는 여러 가지 이유가 있습니다. 여기서 CDN을 사용할 수 있습니다.
(CDN은 데이터 네트워크 위에 구축된 분산 콘텐츠 배포 네트워크입니다. CDN의 역할은 스트리밍 미디어 서버 클러스터 기술을 사용하여 단일 시스템 시스템의 부족한 출력 대역폭 및 동시성 기능의 단점을 극복하고 동시성을 크게 향상시킬 수 있는 것입니다. 시스템에서 지원하는 스트림 수는 단일 지점 오류의 부작용을 줄이거나 방지합니다.)

2. 8. 데이터 연결 생성 횟수 감소

연결을 생성하는 것은 매우 비용이 많이 드는 작업이므로 데이터 연결 생성 횟수를 최대한 줄여야 하며, 작업은 하나의 요청에 일괄적으로 수행되어야 합니다. 작은 데이터 패킷을 여러 번 보내는 경우 2초 이내에 전송되도록 노력해야 합니다. 짧은 시간 내에 다른 서버에 접속할 때는 무선 연결을 최대한 재사용하세요.

3. 사용자 경험 최적화

3. 1. 내용이 순서대로 표시됩니다.

예를 들어 비즈니스 모듈에 텍스트와 그림이 모두 있는 경우 로딩이 50%-90%에서 멈출 수 있으므로 텍스트가 먼저 로드된 다음 그림이 로드됩니다.

3. 2. 발전에 힘입어

네트워크 상태에 관계없이 로딩 진행률은 항상 50%에서 시작하여 약 98% 정도의 진행률을 유지합니다.

3.3. UI 디스플레이 레이아웃 고정, 로딩 시 가상 레이아웃 보기 미리 로드 가능

Zhihu와 유사하게 로드 시 "로딩 애니메이션/뷰"가 기본 페이지에 미리 로드된 자리 표시자 이미지를 표시하도록 변경되었습니다.

3. 4. 약한 네트워크 로딩 실패/비어 있는 데이터의 경우 "다시 로드" 버튼을 추가하거나 풀다운 새로 고침 작업을 추가할 수 있습니다.

예를 들어, 요청에 데이터/네트워크 장애가 없는 경우 '다시 로드' 버튼을 추가하여 사용자가 "제어 가능" 상태에 있음을 인식하고 사용자 불안을 줄입니다.

4. 이미지 로딩 최적화

4.1 더 빠른 이미지 형식 사용

엄밀히 말하면 약한 네트워크에서의 최적화는 아니지만 더 빠른 이미지 형식이 정말 중요합니다! 여기서는 WebP 형식을 사용하는 것이 좋습니다. (WebP 형식은 이미지 로딩 속도를 높이기 위해 Google에서 개발한 이미지 형식입니다. 이미지 압축 용량은 JPEG의 약 2/3에 불과하며 서버 대역폭 리소스와 데이터 공간을 많이 절약할 수 있습니다. 그러나 WebP는 손실 압축입니다. 인코딩 동일한 품질의 WebP 파일은 JPEG 파일을 인코딩하는 것보다 더 많은 컴퓨팅 리소스가 필요합니다.)

4. 2. 네트워크 상태에 따라 정확도가 다른 그래프 제시

예를 들어(원본 이미지의 경우 600X480):

  • 2/3G는 저해상도 사진을 사용합니다. 80의 정밀도로 300X240 사진을 보냅니다.
  • 4G 일반 해상도 사진은 600X480에서 정밀도 80으로 제공됩니다.
  • WiFi 고화질 사진(네트워크 속도를 기준으로 판단하는 것이 가장 좋으며 WiFi도 느릴 수 있음): 100의 정밀도로 600X480 사진을 보냅니다.

4.3 , SDWebImage 매개변수 옵션

사용 시나리오에 따라 SDWebImageOptions 상수 설명을 참조하여 이미지를 로드하세요.

4.4 이미지를 로드하지 마세요

네트워크가 약한 경우 동작에 영향을 주지 않고 간단한 텍스트 설명을 통해 해당 영역의 내용을 사용자에게 알릴 수 있다면 이미지를 로딩하기 전 네트워크가 원활해질 때까지 이미지가 로딩되지 않을 수도 있습니다. 물론 이 방법은 상황에 따라 다르며 일반적으로 앱 설정 옵션에 "약한 네트워크 상태에서는 사진을 표시하지 않음" 버튼을 추가할 수 있습니다.

추천

출처blog.csdn.net/baidu_33298752/article/details/130947086