URL의 이미지를 내 앱에로드하고 있습니다. 이미지 크기가 큽니다 (약 1.5Mb). 속도를 높이기 위해이 이미지를로드하는 데 여러 스레드 (예 : 2 스레드)를 어떻게 사용할 수 있습니까? 이 이미지를로드하는 데 하나의 스레드를 사용하는 경우 약 5 초가 소요되며이 기간을 줄이려고합니다.URL에서 여러 스레드로 이미지로드
답변
정확합니다. 1.5Mb는 큰 이미지이며 최적화하는 방법은 많은 스레드를 사용하지 않는 것입니다. 당신이 올바른 길을 가고 있지만. 이 기법은 "슬라이싱 (slicing)"이라고하며 이미지로드 속도를 높이기 위해 웹에서 많이 사용됩니다. 따라서 이미지를 가져 와서 서버에있는 3 ~ 4 개의 작은 사진으로 잘라내십시오. 렌더링 할 때이 4 개의 이미지를 한꺼번에 호출합니다. 하나의 큰 그림보다 빠르게로드됩니다. 또한 이것은 최종 사용자의 "인식 된"대기 시간을 줄입니다.
또한 이미지를 슬라이스 할 때 이미지의 해당 부분을 표시하는 데 필요한 색상 수를 줄이면 파일 크기가 상당히 줄어들 수 있습니다.
예를 들어 Google은 기본 검색 페이지에서 기본 로고에 대해이 작업을 수행합니다. 로고가 4 분할 된 이미지를 볼 수 있습니까?
슬라이싱 단점
는 유지 비용이 증가한다는 것이다. 어떤 사람들은이 이미지 분할을 유지하고 앱이 계속 변화함에 따라 아무 것도 잘 풀리지 않도록해야합니다.
그래서이 솔루션은 서버에 달려 있습니다. 감사합니다. – lenhhoxung
예 해결책은 더 많은 서버입니다. 당신은 클라이언트에 이것을하는 것을 시도 할 수있다 그러나 아무 소용이 없을 것이고 당신은 조금의 퍼포먼스 이득도 거의하지 않을 것이다. –
다음 코드를 따르세요뿐만 아니라 이미지를로드하는 동안
//in .h file declare the following objects:
IBOutlet UIImageView *imgTest;
-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;
//in .m file write the following code:
-(IBAction)buttonTapped:(id)sender
{
[self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}
-(void)LoadImage:(NSString *) urlString
{
NSURL *imgURL=[NSURL URLWithString:urlString];
NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
[self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}
-(void)setImage:(NSData *) imgData;
{
imgTest.image=[UIImage imageWithData:imgData];
}
당신은 활동 표시를 사용할 수 있습니다. buttonTapped 메소드에서 시작하고 setImage 메소드에서 중지하십시오.
이 정보가 도움이되기를 바랍니다.
이미지 (큰 데이터)를 다운로드 할 때 이미 다른 스레드를 사용했기 때문에 이것이 도움이 될 것이라고 생각하지 않습니다. – lenhhoxung
- 1. URL에서 이미지로드
- 2. URL에서 이미지로드
- 3. oAuth 뒤에있는 URL에서 이미지로드
- 4. url에서 picturebox 배경으로 이미지로드
- 5. Unity : URL에서 이미지로드 실패
- 6. URL에서 갤러리로 이미지로드
- 7. ImageSwitcher가 URL에서 이미지로드
- 8. C++의 URL에서 이미지로드
- 9. 버튼 클릭시 URL에서 이미지로드
- 10. WP8의 웹 URL에서 이미지로드
- 11. Android ImageView - URL에서 이미지로드
- 12. URL에서 이미지로드 바이트로 저장
- 13. ListView android의 URL에서 이미지로드
- 14. C# URL에서 그림 상자로 이미지로드
- 15. iPhone NSMutableArray URL에서 배경 이미지로드
- 16. 특수 문자가있는 URL에서 이미지로드 중입니다.
- 17. Android - 작동하지 않는 URL에서 이미지로드
- 18. AS3 | 로더 오류가있는 URL에서 이미지로드
- 19. 안드로이드에서 URL에서 이미지로드, 작은 경우에만
- 20. 여러 스레드로 ffmpeg 실행
- 21. 가로 목록보기 URL에서 동일한 이미지로드 (피카소 사용)
- 22. Windows 스토어 - URL에서 이미지로드 - 성능 저하
- 23. UIScrollView 및 UITableViewController의 URL에서 지연 이미지로드
- 24. iPhone/Objective-C TTLauncher보기 URL에서 고해상도 이미지로드
- 25. 자바 스크립트 : URL에서 이미지로드 및 디스플레이
- 26. AS3 | URL에서 이미지로드 및 발행 드래그 시작
- 27. URL에서 이미지로드 - 이미지가없는 경우 예외를 캡처하는 방법
- 28. 여러 이미지로드 메모리 문제
- 29. iPhone에 여러 이미지로드
- 30. Android : 여러 이미지로드
여러 스레드를 사용하면 단일 리소스 다운로드 속도가 빨라지지는 않습니다. 병목 현상은 장치에서 사용할 수있는 대역폭 일 가능성이 큽니다. – alxmitch
이미지를 청크로 분할하고 필요에 따라 각 청크를 보내려면 클라이언트 측 코드가 두 개 (또는 그 이상)의 개별 조각을 다운로드해야하며 모든 구성 요소가있는 경우이를 다시 어셈블하기 위해 서버 측 스크립트가 필요합니다 원본 이미지로 이것은 간단한 작업이 아닙니다. –
서버에 액세스 할 수 없기 때문에 나에게 힘든 것 같습니다. 클라이언트가 책임을 질 수 있다면 그럴 것입니다. – lenhhoxung