iOS 좋아요 기능 높은 동시 사고
앞말
웨이보에서 핫이슈에 대한 좋아요 수 W.서버가 이렇게 높은 동시 요청을 받는 것은 틀림없이 매우 큰 압력을 받을 것이다.데이터베이스에서 이 좋아요를 어떻게 쓰는지 탐구하지 않겠습니다(정말 큰 프로젝트입니다. 한 개씩 받을 때마다 한 번씩 쓰겠습니다). iOS 핸드폰에서 좋아요 기능을 어떻게 처리하는지만 탐구하겠습니다.
본고는 위챗과 위챗을 참고하여 그 실현을 추측하고 좋아요 기능을 어떻게 처리하는지 탐구하고자 한다.
위챗 모멘트의 좋아요 수는 상대적으로 적다.웨이보의 좋아요 수는 다섯 자릿수에 달한다.그것은 반드시 다른 전략을 채택해야 한다.
먼저 거시적으로 이 문제를 생각하다.
서버의 최신 좋아요 수 좋아요 단추와 네트워크의 상호작용을 언제 얻을지 두 종류로 나뉜다
서버의 최신 좋아요 수 좋아요 단추와 네트워크의 상호작용을 언제 얻을지 두 종류로 나뉜다
서버의 최신 좋아요를 언제 받을 수 있습니까?
그래서 자신이 추적하는 모멘트에 대해 어떤 모멘트의 새로운 동태를 알 수 있는 특별한 API가 있을 것이라고 대담하게 추측했다.이 API는 정시 액세스를 사용할 수 있으며 간혹 한 번만 액세스할 수 있습니다.듀우수의 말에 의하면 소켓이나 프로토타입 같은 고속 http 요청일 수도 있다.
물론 구체적인 상황은 이보다 훨씬 복잡하다. 이상은 바로 개인이 멋대로 추측한 것이다.
좋아요 버튼과 네트워크의 상호작용
및 App
사용자가 기대하는 좋아요 상태와 데이터베이스 데이터는 어쨌든 일정한 일치를 보장할 수 없다.
그러나 어떻게 가능한 한 일치를 이룰 수 있을까?이 문제에 대하여 개인의 우견을 제기하다.
아니면 먼저 위챗과 위챗에서 착안하여 생각하세요.
우선 UI 표시 방법
먼저 간단하고 만능적인 방법을 말해라.
때때로 사용자가 의식적으로 시작한 네트워크 요청은 우리는'로드 중'을 표시하고 심지어 사용자가 클릭하지 못하게 한다.그리고 요청이 성공적으로 처리된 후에 사용자가 클릭하도록 합니다.예를 들어 로그인 인터페이스에서 로그인을 클릭하면 우리는'로그인중'을 표시하고 사용자가 다른 조작을 하는 것을 금지합니다.예를 들어 좋아요를 눌렀을 때 사용자가 다른 조작을 하지 못하게 하고'발기 요청 중'을 표시합니다.성공하면 버튼 상태를 바꾸고, 실패하면'좋아요 실패/좋아요 취소 실패'를 알립니다.이렇게 하면 높은 합병과 기대치가 다르지만 사용자가 모르는 상황을 완전히 피할 수 있다.
그러나 이런 방법은 사용자 체험이 좋지 않다.그러나 사용자 체험을 선택했다면 심심할 수도 있다는 문제가 있다. 버튼을 계속 누르고 요청을 많이 하면 휴대전화 메모리와 서버에 큰 스트레스를 준다.서버의 데이터를 마지막으로 쓰는 것이 사용자의 기대치가 아닐 수도 있습니다.그러나 주류 앱은 사용자 체험을 위해 이런 결과를 책임진다.
그래서 서버에 추가 처리를 하는 것 외에 휴대전화 단말기도 높은 병행 압력을 줄일 필요가 있다.
여기서 나는 위챗의 방법을 더욱 선호한다. 버튼 2급view에 표시하면 사용자가 좋아요를 잘못 눌렀다가 취소할 가능성을 줄일 수 있다.네트워크 요청을 완료할 시간도 주었다.
UI를 먼저 변경하고 요청이 실패하면 다시 바꾸고'요청 실패'를 제시하는 아이디어도 있다.위챗에서'좋아요를 누르면 발송되지 않음'을 빨간색으로 표시합니다.비슷할 거예요.
그리고 언제 인터넷 요청을 할 거예요?
웨이보야, 그건 내가 못 알아봤어. 인터넷 상황에서 클릭할 때마다 요청을 하고 마지막 결과를 인연으로 봤어?
위챗의 좋아요 요청은 바로 보내야 하지만 좋아요를 취소하는 것은 말하기 어렵다.2G 때 좋아요를 누른 후 바로 좋아요를 취소했는데 결국 좋아요를 눌렀기 때문이다.
매번 클릭할 때마다 보내는 것은 높은 합병과 기대치 편차를 초래하기 가장 쉬운 조작이다.그래서 클릭할 때마다 이런 수연법을 보내는 것은 권장하지 않는다.
그러면 질문이 하나 있습니다. 웨이보에서 방금 좋아요 요청을 보내고 상세 페이지에 눌렀습니다.그래서 점점프 전에 판단하여 요청 없이 상세 컨트롤러에 알림을 등록했습니다.요청이 성공하면 알림을 보내고 상세 컨트롤러가 데이터를 갱신하도록 알립니다.
추측 코드는 다음과 같다.
NSMutableArray *isRequestingArray;// cell BOOL
- (void)btnClick:(UIButton *)btn atIndexPath:(NSIndexPath *)indexPath {
// btn
btn.selected = !btn.selected;
//
//
if (![_isRequestingArray[indexPath.section][indexPath.row] boolValue]) { //
//
_isRequestingArray[indexPath.section][indexPath.row] = @"1";
__weak typeof(self) wself = self;
[PraiseAPI startWithSuccessBlock:^(__kindof BaseRequest *request){
__strong typeof(wself) sself = wself;
sself->isRequestingArray[indexPath.section][indexPath.row] = @"0";
// btn
//
//
} failureBlock:^(__kindof BaseRequest *request, NSError *error) {
__strong typeof(wself) sself = wself;
sself->isRequestingArray[indexPath.section][indexPath.row] = @"0";
// btn
}];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NextViewcontroller *nextVC = [[NextViewcontroller alloc] init];
if ([_isRequestingArray[indexPath.section][indexPath.row] boolValue]) {
// nextVC
}
[self.navigationController pushViewController:nextVC animated:YES];
}
클릭 후 2s내에 다시 클릭하지 않고 원상태와 다르면 네트워크 요청을 시작합니다.보기가 인터페이스를 종료할 때도 바로 네트워크 요청을 시작합니다.
아직 완벽하게 생각하지 못했으니 벽돌을 던져 옥을 끌어들였으면 좋겠다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Service Configuration Error MessagesOccasionally, during bootup of Cisco hardware through Cisco IOS software, error messages similar to these are displayed:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.