Em dezembro de 2017, os Websockets são suportados por (praticamente) todos os navegadores e seu uso é muito comum.
No entanto, isso não significa que os Websockets conseguiram substituir o AJAX, pelo menos não completamente, especialmente porque a adaptação HTTP / 2 está em ascensão.
A resposta curta é que o AJAX ainda é ótimo para a maioria dos aplicativos REST, mesmo ao usar Websockets. Mas deus está nos detalhes, então ...:
AJAX para pesquisa?
O uso do AJAX para pesquisas (ou pesquisas longas) está acabando (e deveria ser), mas ainda permanece em uso por duas boas razões (principalmente para aplicativos da Web menores):
Para muitos desenvolvedores, o AJAX é mais fácil de codificar, especialmente quando se trata de codificar e projetar o back-end.
Com o HTTP / 2, o custo mais alto relacionado ao AJAX (o estabelecimento de uma nova conexão) foi eliminado, permitindo que as chamadas AJAX tivessem um bom desempenho, especialmente para postar e fazer upload de dados.
No entanto, o push do Websocket é muito superior ao AJAX (sem necessidade de autenticar novamente ou reenviar cabeçalhos, sem necessidade de ida e volta "sem dados", etc '). Isso foi discutido várias vezes.
AJAX para REST?
Um uso melhor para o AJAX são as chamadas à API REST. Esse uso simplifica a base de código e impede o bloqueio da conexão Websocket (especialmente em uploads de dados de tamanho médio).
Há vários motivos convincentes para preferir chamadas à API do AJAX for REST e upload de dados:
A API AJAX foi praticamente projetada para chamadas à API REST e é uma ótima opção.
Chamadas e uploads REST usando AJAX são significativamente mais fáceis de codificar, tanto no cliente quanto no back-end.
À medida que a carga útil dos dados aumenta, as conexões do Websocket podem ser bloqueadas, a menos que a lógica de fragmentação / multiplexação de mensagens seja codificada.
Se um upload for realizado em uma única send
chamada do Websocket , ele poderá bloquear um fluxo do Websocket até que o upload seja concluído. Isso reduzirá o desempenho, especialmente em clientes mais lentos.
Um design comum usa pequenas mensagens bidimensionais transferidas pelos Websockets enquanto o REST e os uploads de dados (cliente para servidor) aproveitam a facilidade de uso do AJAX para impedir o bloqueio do Websocket.
No entanto, em projetos maiores, a flexibilidade oferecida pelos Websockets e o equilíbrio entre a complexidade do código e o gerenciamento de recursos derrubarão o equilíbrio em favor dos Websockets.
Por exemplo, os uploads baseados no Websocket podem oferecer a capacidade de retomar envios grandes depois que uma conexão é interrompida e restabelecida (lembre-se do filme de 5 GB que você deseja enviar?).
Ao codificar a lógica de fragmentação de upload, é fácil retomar um upload interrompido (a parte mais difícil foi codificar a coisa).
E quanto ao push HTTP / 2?
Provavelmente devo acrescentar que o recurso de envio HTTP / 2 não substitui (e provavelmente não pode) substituir Websockets.
Isso já foi discutido aqui antes, mas basta mencionar que uma única conexão HTTP / 2 atende a todo o navegador (todas as guias / janelas); portanto, os dados enviados por HTTP / 2 não sabem a qual guia / janela pertence, eliminando sua capacidade de substituir a capacidade do Websocket de enviar dados diretamente para uma guia / janela específica do navegador.
Embora os Websockets sejam ótimos para pequenas comunicações bidirecionais de dados, o AJAX ainda traz várias vantagens - especialmente ao considerar cargas úteis maiores (uploads etc.).
E segurança?
Bem, geralmente, quanto mais confiança e controle são oferecidos a um programador, mais poderosa é a ferramenta ... e mais preocupações de segurança surgem.
O AJAX por natureza teria uma vantagem, já que sua segurança está embutida no código do navegador (que às vezes é questionável, mas ainda está lá).
Por outro lado, as chamadas AJAX são mais suscetíveis a ataques "man in the middle", enquanto os problemas de segurança dos Websockets geralmente são bugs no código do aplicativo que introduziu uma falha de segurança (geralmente a lógica de autenticação de back-end é onde você os encontra).
Pessoalmente, não acho que isso seja tão grande diferença, se alguma coisa que eu acho que os Websockets são um pouco melhor, especialmente quando você sabe o que está fazendo.
Minha humilde opinião
IMHO, eu usaria Websockets para tudo, menos chamadas à API REST. Uploads de Big Data Eu fragmentaria e enviaria Websockets quando possível.
As pesquisas, IMHO, devem ser proibidas, o custo no tráfego de rede é horrível e o Websocket Push é fácil o suficiente para gerenciar, mesmo para novos desenvolvedores.