¿Por qué alguien usaría Ajax sobre WebSockets?

AJAX devuelve una sola respuesta a una sola solicitud. Los sockets web pueden manejar múltiples mensajes bidireccionales entre el navegador y el servidor. Si está utilizando HTTP / 2 (o incluso HTTP 1.1 con keep-alive), la diferencia para los casos de uso más comunes (donde el cliente consulta al servidor) es insignificante: HTTP / 2 mantiene una conexión persistente abierta al servidor de todos modos, así que las solicitudes son tan rápidas como si las hiciera a través de un socket web.

Los beneficios para AJAX son los beneficios de usar HTTP. Las solicitudes tienen metadatos (encabezados), un verbo (el método) y apuntan a puntos finales que puede alcanzar de forma reproducible. No necesita inventar una nueva forma de enviar encabezados, aislar solicitudes paralelas y administrar el progreso de carga y descarga cada vez que inicia un nuevo proyecto. AJAX también maneja datos binarios con mucha más facilidad y le permite administrar cosas como la seguridad entre dominios fuera de su aplicación (es decir, cada punto final puede tener diferentes encabezados CORS, mientras que un socket web necesita implementar este por mensaje).

Los beneficios para los sockets web realmente residen en su capacidad de devolver múltiples respuestas a cero o más solicitudes. Los sockets web también le permiten garantizar el orden de las solicitudes y respuestas. También alivian la sobrecarga de metadatos que se enviarían en encabezados de solicitud HTTP para mensajes pequeños, aunque este beneficio se puede negar si la sobrecarga del encuadre del socket web o la fragmentación del mensaje se vuelve sustancial.

La mayor desventaja de AJAX es la interfaz, aunque la API de recuperación mitiga en gran medida esto. Enviar encabezados en cada solicitud puede ser engorroso, pero la compresión HPACK de HTTP / 2 mitiga esto.

Los sockets web adolecen de un soporte deficiente en entornos detrás de servidores proxy. La gestión de múltiples solicitudes hacia y desde el servidor debe hacerse manualmente. Debido a que los mensajes en los sockets web están ordenados, el rendimiento con solicitudes paralelas es pobre en comparación con las solicitudes paralelas realizadas a través de AJAX.

Para la depuración, hay algunas buenas herramientas disponibles para crear un socket web y enviar y recibir mensajes que estén disponibles fuera del navegador. Las herramientas como curl y wget están disponibles para HTTP, y son muy comunes.

En general, si simplemente realiza una única solicitud y devuelve una única respuesta, los sockets web no ofrecen ningún beneficio sobre el antiguo AJAX.