Réponse courte
Maintenir une websocket active a un coût, tant pour le client que pour le serveur, alors qu'Ajax n'aura un coût qu'une seule fois, en fonction de ce que vous en faites.
Réponse longue
Les Websockets sont souvent mal compris à cause de cette idée de "Hey, utilisez Ajax, ça fera l'affaire !". Non, les Websockets ne remplacent pas Ajax. Ils peuvent potentiellement être appliqués aux mêmes champs, mais il y a des cas où utiliser Websocket est absurde.
Prenons un exemple simple : une page dynamique qui charge des données après le chargement de la page du côté client. C'est simple, faites un appel Ajax. Nous n'avons besoin que d'une seule direction, du serveur vers le client. Le client demandera ces données, le serveur les enverra au client, terminé. Pourquoi implémenter des websockets pour une telle tâche ? Vous n'avez pas besoin que votre connexion soit ouverte en permanence, vous n'avez pas besoin que le client demande constamment au serveur, vous n'avez pas besoin que le serveur notifie le client. La connexion restera ouverte, elle gaspillera des ressources, car pour garder une connexion ouverte, il faut constamment la vérifier.
Pour une application de chat, les choses sont totalement différentes. Il faut que le client soit informé par le serveur au lieu de l'obliger à demander au serveur toutes les x secondes ou millisecondes s'il y a du nouveau. Cela n'aurait aucun sens.
Pour mieux comprendre, voyez cela comme deux personnes. L'une des deux est le serveur, l'autre est le client. Ajax est comme envoyer une lettre. Le client envoie une lettre, le serveur répond avec une autre lettre. Le fait est que, pour une application de chat la conversation serait comme ça :
"Hé, serveur, tu as quelque chose pour moi ?
- Non.
- Hé, serveur, tu as quelque chose pour moi ?
- Non.
- Hé, serveur, tu as quelque chose pour moi ?
- Oui, c'est ici."
Le serveur ne peut pas réellement envoyer une lettre au client, si le client n'a jamais demandé de réponse. C'est un énorme gaspillage de ressources. Parce que pour chaque requête Ajax, même si elle est mise en cache, vous devez effectuer une opération du côté du serveur.
Maintenant le cas que j'ai discuté plus tôt avec les données chargées avec Ajax. Imaginez que le client est au téléphone avec le serveur. Garder la connexion active a un coût. Cela coûte de l'électricité et vous devez payer votre opérateur. Maintenant, pourquoi auriez-vous besoin d'appeler quelqu'un et de le garder au téléphone pendant une heure, si vous voulez juste que cette personne vous dise 3 mots ? Envoyez une putain de lettre.
En conclusion, les Websockets ne sont pas un remplacement total d'Ajax !
Parfois, vous besoin de Ajax où l'utilisation de Websocket est absurde.