wx_chat_yj
나는 한동안 IM에서 일해 왔으며 이번에는 내가 전에 만난 함정을 녹음했습니다. 나중에 채팅 부분을 공유하겠습니다. 모든 사람에게 도움이되기를 바랍니다. 내가 전에 온라인으로보고있는 프로젝트 중에서, 나는 개발 과정에서 함정에 직면하는 것에 대해 거의 이야기하지 않았습니다. 처음으로 채팅을 작성하면 더 많은 문제가 발생할 수 있습니다. 여기서 나는 주로 내가 만난 함정에 대해 이야기 할 것입니다. 모두 사진을 찍을 수 있습니다. 저에게 다른 의견을주세요. 감사합니다. 모두가 함께 진전을 이룹니다!
그것이 당신에게 유용하다면, 별을 기억하십시오!
기본 기능에는 포함됩니다
1. 프레임 워크부터 시작하십시오
프로젝트 운영 스크린 샷


기본 프로젝트 구조


2. 데이터베이스는 SQL 문을 작성하지 않고 WeChat 오픈 소스 WCDB를 사용합니다.
3. 나는 다음 함정 중 일부를 만났다
1. 인터페이스 지연
- 인터페이스 레이아웃을 사용하는 경우 UitableView+... Cell의 타사 자동 높이 계산이 사용됩니다. 많은 프로젝트 채팅 스타일이 있기 때문에 XIB 레이아웃을 사용할 때 왼쪽 및 오른쪽 스타일 만 배치되며 스타일은 숨기고 표시하여 제어됩니다. 개발로 인해 너무 많은 데이터를 테스트 할 수 없었기 때문에 데이터가 너무 많을 때 매우 말더듬이되었습니다. 보스는 카카카에 대해 이야기하고 있었는데, 이는 부러진 차를 당기는 늙은 소보다 훨씬 더 말더듬이었다. 이런 종류의 말더듬은 페이지를 미끄러 뜨릴 때 분명히 느껴졌습니다.
문제의 원인을 찾은 후 다음 해결책입니다.
2. 데이터 지연
- 처음에는 메시지 당 읽지 않은 사람의 처리에 관여했기 때문에 서버 영수증의 수를 읽지 않고 현재 채팅 메시지 모델을 대체했습니다. 채터 러의 수가 특정 수준에 도달하면 더 많은 사람들이 뉴스를 읽습니다. 현재 영수증이 빈번합니다. 영수증이 특정 데이터를 새로 고치기 위해 돌아 오면 인터페이스가 다시 온다. 이 과정에서 읽지 않은 것은 처리됩니다. 고객에게는 몇 가지 문제가 있습니다. 페이지를 슬라이딩 할 때 현재 읽지 않은 메시지를 서버로 보냅니다. 서버는 서버를 성공적으로 반환하여 읽었 음을 나타냅니다. 서버 메시지는 대기 및 서버로 자주 수신됩니다. 서버는 종종 클라이언트에게 밀려납니다. 이로 인해 페이지 새로 고침이 너무 자주 발생합니다. 고객 측에 붙어 있습니다. (이 시점에서 메시지를 교체하는 데 문제가있는 문제는 현재 메시지 트래버스에서 대체 될 데이터를 찾는 것입니다).
문제의 근본 원인을 찾은 후 다음 방법을 사용하여 해결했습니다.
- 보내는 메시지를 별도로 저장하고 읽지 않은 번호를 교체하면 현재 전송 된 번호를 교체하면됩니다.
- 높이를 결정할 때 (HeightforseAtIndexPath)는 각 모델에 현재 메시지 위치를 넣습니다. 메시지를 교체 할 때는 필요에 따라 교체 할 메시지를 빠르게 읽고 찾을 수 있습니다. 위치를 결정하려면 여기에 CellforyatindexPath를 쓰지 마십시오. 그렇지 않으면 다시 사기가 될 것입니다.
위의 방법의 유창성은 기본적으로 요구 사항을 충족합니다. 보낸 메시지에서 데이터를 대체 할 데이터 만 찾아야하며 위치가 결정되었습니다. 직접 교체하십시오.
3. 데이터베이스 읽기 메시지가 붙어 있습니다
- 처음에는 FMDB를 사용했습니다.
- 데이터를 저장하면 모델 데이터가 직접 저장되며 데이터가 많으면 다시 말더듬이 있습니다. (우리는 그것을 잘 사용하지 않았다) 저장할 때 더 빨리 느껴지지만 읽을 때 너무 많은 데이터를 얻을 때 갇히게됩니다. 여기에는 그림을 데이터로 전송하고 저장하는 또 다른 것이 있습니다. 처음 페이지를 입력하면 수십 개의 사진이 연속으로있는 경우 외부에서 클릭하면 잠시 기다려야합니다. 메인 스레드가 붙어 있습니다.
우리는 문제를 찾을 때 문제를 해결할 것입니다.
- 우리는 데이터베이스에 WeChat 오픈 소스 WCDB를 사용하며 모든 측면에서 더 즐겁습니다. SQL 진술에 감사 할 필요가 없습니다.
모델을 저장하면 지연없이 모델도 얻게됩니다.
- 이미지 처리의 경우 이미지를 사용하여 데이터를 사용하여 샌드 박스를 저장하고 이미지 주소의 키 필드와 메시지를 샌드 박스를 저장하는 키로 사용합니다. 현재 데이터베이스는 주소 만 저장하면됩니다. 이 주소로 키를 기반으로 사진을 찾으십시오. 수십 장의 사진을 테스트 한 후에는 느끼지 못했습니다. 여기서 우리는 게시 한 사진 만 캐시합니다. 상대방의 이미지 sdwebimageview가 캐시됩니다. 자신의 이미지를 캐시 링하는 목적은 처리에 사용하도록 보내는 것입니다. 여기서는 NSCACHE CACHE를 사용하여 코드에서 코드를 처리합니다 ...
4. 페이지에 표현이 가득 차면 붙어 있습니다.
그러나 어느 날, 동료가 시스템 키보드에 표현식으로 가득 찬 전체 페이지를 게시했는데 다시 가서 다시 붙어있었습니다. 그리고 다른 동료들은 또한 모든 사람들이 이해할 수있는 카카 카 (Kakaka)라고 게시했습니다 (또한 우리 회사에는 테스트 상황이 있습니다. 즉, 월요일부터 금요일까지 매일 30 분, 주말마다 30 분 동안 테스트를합니다. 보스와 모든 직원은 그곳에 있습니다). 우리는 처리없이 일반적인 Uilable을 사용하기 때문입니다.
이것은 내가 유틸리티, 비동기식 렌더링을 기억하여 인터페이스를 더 매끄럽고 매끄럽게 만듭니다. 교체 후 부드러움이 많이 증가했습니다.
5. 진지하게 놓친 뉴스
- 채팅의 첫 번째 버전이 나온 후 여러 사람이 함께 테스트했습니다. 누출은 매우 심각한 것으로 밝혀졌습니다. 조사 후 뉴스를 저장할 때 중요한 문제가 발생했습니다.
- 현재 솔루션 :
- 소켓에 의해 푸시 된 메시지에 따르면 소켓이 연결된 한 저장됩니다.
- 메시지를 수신 한 후 서버로 반환됩니다 (서버는 간격이 매우 짧은 순간에 가장 큰 메시지를받습니다). 영수증이없는 경우 서버는 메시지를 보낼 때 여러 메시지를 푸시하며 직접 무거운 하중을 배열해야합니다.
- 또한 네트워크가 소켓을 연결하고 재 연결하면 메시지를 가져 와서 데이터를 효과적으로 보장합니다.
6. 여러 아바타의 지연에 대해 이야기하십시오
여기서 우리는 Dingtalk 및 Wechat과 같은 9 명으로 구성된 아바타를 만들고 싶습니다. 그리고 아바타가 없을 때, 이름의 마지막 단어는 아바타의 위치에 표시되어야합니다.
여기에서는 9 개의 버튼을 사용했으며 사진과 텍스트에 사용할 수 있습니다. 나는 그것을 썼을 때 많은 데이터가있을 때 멈출 것이라고 생각했지만 결과적으로 실제 아바타 수를 기반으로 프레임 조정 위치를 계산하고 필요하지 않은 버튼을 숨겼습니다. 결과가 작성된 후. 효과는 꽤 좋습니다. 유창함은 요구 사항을 충족 할 수 있습니다. 이 아바타는 세 사람이 작성했다고 말합니다. 이봐.
7. 콘텐츠가 여전히 개선되고 있습니다 ...