Front End

17 jul, 2013

WebSockets são lentos no Chrome?

Publicidade

Neste meu artigo, no qual falei sobre teste unitário do Socket.IO com o Jasmine, houve um ponto em que mencionei que precisei utilizar timeouts que eram de 1,5 seg ao fazer conexões e desconexões assíncronas no servidor Socket.IO. Eu estava trabalhando bem com timeouts de 750 milissegundos no Firefox, mas quando eu fiz os testes com o Chrome, os timeouts ocorriam e as especificações estavam falhando. Vejamos se conseguimos aprofundar esse tema e entender por que o Chrome vai tão mal aqui.

O resultado dos meus testes

Realizei um monte de testes e, honestamente, não sei exatamente o que está causando esse problema, mas não é necessariamente apenas o Chrome. Fiz os testes com a última versão do Chrome e do Firefox em dois computadores muito diferentes e com resultados igualmente distintos. O Firefox, em ambas as máquinas, levou perto de 1/3 segundo para conectar e imediatamente desconectar de uma conexão WebSocket em um servidor Socket.IO. O Chrome foi bem diferente, no entanto.

Em meu PC (com AMD Phenom II X4 CPU), o Chrome levou mais de 1 seg para conectar e desconectar via WebSocket (testei com múltiplos transportes). Em meu laptop (Intel Core i7 2760QM), ele levou quase sempre menos de 50ms. Pode ser que não seja nada relacionado com o processador, mas isso é a única coisa em que consigo pensar.

Tente você mesmo

Salvei os testes em um repositório GitHub. Portanto, se você quiser tentar testar a(s) sua(s) máquina(s) e conseguir me ajudar a entender esse estranho comportamento, os testes estarão lá para que você tente. É possível vê-los aqui.

Se você realmente tentar, deixe um comentário com os resultados que encontrar. Instruções de setup e execução estão no README do projeto. O teste passa por cada transporte individualmente, mas estou interessado no tempo relatado para cada transporte WebSocket.

Conclusão

Realmente não sei o que concluir a partir desse exercício, exceto que é importante realizar testes em múltiplos navegadores e em múltiplas máquinas. E ainda preciso me certificar de que as mensagens estão indo e voltando do servidor em um ritmo decente, porque se elas estiverem, então talvez não importe quanto tempo leve para realizar a conexão, porque o aplicativo tenderá a se conectar apenas quando iniciar a primeira vez. De qualquer forma, espero que você possa me ajudar a responder a algumas das perguntas e, talvez, possamos ajudar o Chrome a ser melhor.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://www.joezimjs.com/javascript/are-websockets-slow-on-chrome/