Wx_chat_yj
Trabalho no IM há um tempo, e desta vez gravei algumas armadilhas que encontrei antes. Vou compartilhar a parte do bate -papo mais tarde. Espero que seja útil para todos. Entre os projetos que já assisti online antes, raramente falava sobre encontrar armadilhas durante o processo de desenvolvimento. Se você escrever um bate -papo pela primeira vez, poderá encontrar mais problemas. Aqui vou falar principalmente sobre as armadilhas que encontrei. Todos são bem -vindos para tirar fotos. Por favor, me dê opiniões diferentes, obrigado. Todo mundo faz progredir juntos!
Se for útil para você, lembre -se das estrelas!
As funções básicas incluem
Retração, exclusão, cópia de mensagens
Voz, texto, fotos
Número de pessoas não lidas
Outros estilos de mensagem personalizados no projeto
Em projetos reais, existem disco em nuvem, reprodução de vídeo e círculo de amigos ...
1. Comece com a estrutura


2. O banco de dados usa um WCDB de código aberto WECHAT sem escrever uma instrução SQL.
3. Encontrei algumas das seguintes armadilhas
1. Interface lag
- Ao usar o layout da interface, o cálculo da altura automática de terceiros da célula UABLEVIEW+... é usada. Como existem muitos estilos de bate -papo do projeto, apenas os estilos esquerdo e direito são dispostos ao usar o layout XIB e o estilo é controlado por se esconder e exibir. Devido ao desenvolvimento, não usei muitos dados para testar, o que me levou muito gaguejada quando havia muitos dados. O chefe estava falando sobre Kakaka, que era ainda mais gagueira do que a vaca velha puxando um carro quebrado. Esse tipo de gagueira foi claramente sentida ao deslizar a página.
Depois de encontrar a causa do problema, a seguinte solução:
Primeiro, calcule manualmente a altura e resolva os conflitos no layout do XIB. A suavidade da página deslizante é aceitável. Obviamente, pode ser melhor alcançar um layout de quadro suave melhor.
Ao mesmo tempo, quando o XIB está usando o layout do XIB, tente ter o mínimo de níveis possível. Mais níveis afetarão a fluência.
2. Lag de dados
- No início, como estávamos envolvidos no processamento do número de pessoas não lidas por mensagem, substituímos o modelo atual de mensagens de bate -papo através dos números não lidos do recibo do servidor. Quando o número de conversas atingir um certo nível, mais pessoas leem as notícias. Os recibos são frequentes no momento. Quando o recibo volta para atualizar alguns dados, a interface é novamente. Durante esse processo, os não lidos são processados. Existem alguns problemas com o cliente. Ao deslizar a página, envie a mensagem atualmente não lida para o servidor. O servidor o retorna com sucesso para indicar que foi lido. As mensagens do servidor são na fila e freqüentemente recebidas no servidor. Os servidores são frequentemente empurrados para os clientes. Isso faz com que a atualização da página seja muito frequente. Fica preso no lado do nosso cliente. (O problema de substituir as mensagens no momento é encontrar os dados a serem substituídos durante a transversa de mensagem atual)
Depois de encontrar a causa raiz do problema, os seguintes métodos foram usados para resolvê -lo:
- Salve as mensagens que você envia separadamente e substitua o número não lido apenas para substituir o atualmente enviado.
- E ao determinar a altura (HightForousIndexpath) coloca uma posição de mensagem atual em cada modelo. Ao substituir as mensagens, você pode ler rapidamente e encontrar a mensagem a ser substituída conforme necessário. Nunca escreva aqui o CellFoverSindexpath para determinar o local. Caso contrário, seria uma farsa novamente.
A fluência do método acima atende basicamente aos requisitos. Encontre apenas os dados a serem substituídos das mensagens enviadas e o local foi determinado. Basta substituí -lo diretamente.
3. Mensagem de leitura do banco de dados presa
- No começo, usamos o FMDB.
- Ao armazenar dados, os dados do modelo são armazenados diretamente e verifica -se que, quando há muitos dados, eles estão gaguejando novamente. (Não o usamos bem) Sinto -me mais rápido ao salvar, mas quando li, fico preso quando recebo muitos dados. Há outro aqui, que é transferir a imagem para os dados e salvá -los. Quando você insere a página pela primeira vez, se tiver dezenas de fotos seguidas, precisará esperar um pouco quando clicar de fora. O fio principal está preso.
Vamos resolver o problema quando o encontrarmos:
- Utilizamos o Wechat Open Source WCDB para o banco de dados, o que é mais agradável em todos os aspectos. Não há necessidade de agradecer a declarações SQL.
Se você salvar o modelo, também receberá o modelo, sem qualquer atraso.
- Para processamento de imagem, usamos a imagem nos dados para armazenar a caixa de areia e usar os campos principais no endereço e mensagem da imagem como teclas para armazenar a caixa de areia. No momento, o banco de dados precisa armazenar apenas o endereço. Com base na chave como este endereço, encontre a imagem. Depois de dezenas de fotos testadas, eu não senti. Aqui, apenas cache as fotos que postamos. A imagem da outra parte SDWebImageView é armazenada em cache. O objetivo de armazenar em cache sua própria imagem é enviá -la para usar para processamento. Aqui usamos o cache do NScache para processar o código no código ...
4. Quando a página está cheia de expressões, está preso
- Após o tratamento acima, a fluência já é aceitável.
Mas um dia, um colega postou a página inteira, que estava cheia de expressões no teclado do sistema, e eu fui preso novamente. E outros colegas também postaram que era Kakaka, que todos podem entender (além disso, há uma situação de teste em nossa empresa, que é que todos testam meia hora todos os dias de segunda a sexta -feira e meia hora toda noite de fim de semana. O chefe e todos os funcionários estão lá). Porque usamos uilable comum sem nenhum processamento.
É isso que me lembrava de renderização yylable e assíncrona, tornando a interface mais suave e suave. Após a substituição, a suavidade aumentou muito.
5. Notícias seriamente perdidas
- Depois que a primeira versão do bate -papo foi lançada, várias pessoas o testaram juntas. O vazamento foi considerado muito sério. Após a investigação, surgiram problemas importantes quando estávamos armazenando as notícias.
- Solução atual:
- De acordo com a mensagem empurrada pelo soquete, desde que o soquete esteja conectado, ela será salva.
- E depois de receber a mensagem, ele é retornado ao servidor (o servidor recebe a maior mensagem no momento em que o intervalo é muito curto). Se não houver recibo, o servidor pressionará várias mensagens ao enviar mensagens e você precisará organizar as cargas pesadas sozinho.
- Além disso, quando a rede desconecta o soquete e se reconecta, ele também puxa mensagens, garantindo efetivamente dados
6. Fale sobre o atraso de vários avatares
Aqui queremos fazer avatares de 9 pessoas como DingTalk e WeChat. E quando não houver avatar, a última palavra do nome deve ser exibida na localização do avatar.
Aqui eu usei 9 botões, que podem ser usados para imagens e texto. Eu pensei que ficaria preso quando havia muitos dados quando o escrevi, mas, como resultado, calculei a posição de ajuste do quadro com base no número real de avatares e escondi os botões que não eram necessários. Depois que o resultado foi escrito. O efeito é muito bom. A fluência pode atender aos requisitos. Basta dizer que este avatar foi escrito por três pessoas. Ei-hey.
7. O conteúdo ainda está sendo melhorado ...