Pourquoi utiliser AJAX lorsque les WebSockets est disponible?
J'ai été en utilisant les WebSockets pour un certain temps maintenant, j'ai choisi de créer un Agile de gestion de projet outil pour mon projet de fin d'études à l'Université en utilisant le Nœud de serveur et les WebSockets. J'ai trouvé utiliser les WebSockets fourni un 624% d'augmentation du nombre de requêtes par seconde mon application puisse processus.
Cependant depuis le début du projet j'ai lu des failles de sécurité, et certains navigateurs choisir de désactiver les WebSockets par défaut..
Ce qui m'amène à la question:
Pourquoi utiliser AJAX lorsque les WebSockets semble faire un grand travail de la diminution de la latence et de la surcharge des ressources, est-il quelque chose que l'AJAX n'est mieux que les WebSockets?
- Voici une liste de moteurs qui prennent en charge les web sockets. en.wikipedia.org/wiki/...
- Quelques chiffres: blog.arungupta.me/repos-vs-websocket-comparaison-repères
Vous devez vous connecter pour publier un commentaire.
WebSockets n'est pas destiné à remplacer l'AJAX et n'est pas strictement encore un remplacement pour la Comète/long-sondage (bien qu'il existe de nombreux cas où cela a un sens).
Le but de les WebSockets est de fournir une faible latence, bi-directionnel, full-duplex et longue connexion entre le navigateur et le serveur. Les WebSockets ouvre de nouveaux domaines d'application pour les applications de navigateur qui n'étaient pas vraiment possible à l'aide de HTTP et AJAX (jeux interactifs, dynamiques et les flux de médias, relais vers le réseau existant des protocoles, etc).
Cependant, il est certainement un chevauchement entre les WebSockets et AJAX/Comète. Par exemple, lorsque le navigateur veut être informé des événements de serveur (c'est à dire pousser) puis de la Comète techniques et les WebSockets sont certainement les deux options viables. Si votre application a besoin à faible latence pousser des événements alors ce serait un facteur en faveur des WebSockets. D'autre part, si vous avez besoin de co-exister avec les cadres existants et déployé des technologies (OAuth, RESTful Api, les procurations, les équilibreurs de charge) alors ce serait un argument en faveur de la Comète techniques (pour l'instant).
Si vous n'avez pas besoin de les avantages spécifiques que les WebSockets offre, alors il est probablement une meilleure idée de coller avec les techniques existantes comme AJAX et la Comète parce que cela vous permet de réutiliser et de les intégrer à un vaste écosystème d'outils, de technologies, les mécanismes de sécurité, les bases de connaissances (c'est à dire beaucoup plus de personnes sur stackoverflow savoir HTTP/Ajax/Comète que les WebSockets), etc.
D'autre part, si vous créez une nouvelle application qui ne fonctionne pas bien dans le temps de latence et les contraintes de connexion de HTTP/Ajax/Comète, puis envisager d'utiliser les WebSockets.
Aussi, certaines réponses indiquent que l'un des inconvénients des WebSockets est limité/mixte du serveur et de la prise en charge du navigateur. Laissez-moi juste diffus qu'un peu. Alors que iOS (iPhone, iPad) prend toujours en charge le protocole plus ancien (Hixie) la plupart des WebSockets les serveurs prennent en charge à la fois Hixie et la HyBi/L'IETF 6455 version. La plupart des autres plates-formes (si ils n'ont pas déjà prise en charge intégrée), vous pouvez obtenir les WebSockets soutien par l'intermédiaire de web-socket-js (à base de mémoire Flash polyfill). Ce qui représente la grande majorité des utilisateurs du web. Aussi, si vous utilisez le Nœud du serveur backend, alors envisager l'utilisation de Socket.IO qui inclut le web-socket-js comme un secours et si même cela n'est pas disponible (ou désactivé), puis il reviendra à l'aide de quelque Comète technique est disponible pour le navigateur donné.
Mise à jour: iOS 6 prend désormais en charge l'actuel HyBi/IETF 6455 standard.
Avance rapide jusqu'en décembre 2017, Les Websockets sont pris en charge par (presque) tous les navigateurs et leur utilisation est très commun.
Toutefois, cela ne signifie pas que les Websockets réussi à remplacer l'AJAX, du moins pas complètement, surtout que HTTP/2 l'adaptation est à la hausse.
La réponse courte est que l'AJAX est toujours agréable pour la plupart des applications REST, même quand utiliser les Websockets. Mais dieu est dans les détails, alors...:
AJAX d'interrogation?
L'utilisation d'AJAX pour l'interrogation (ou d'interrogation) est en voie de disparition (et il doit l'être), mais il reste encore en usage pour deux bonnes raisons (surtout pour les petites applications web):
Pour de nombreux développeurs, AJAX est plus facile de code, surtout quand il s'agit de codage et de conception de l'arrière-plan.
Avec HTTP/2, le coût le plus élevé lié à l'AJAX (l'établissement d'une nouvelle connexion) a été éliminé, permettant les appels AJAX pour être tout à fait performant, en particulier pour l'affichage et le téléchargement de données.
Cependant, Websocket push est de loin supérieure à l'AJAX (pas besoin de s'authentifier à nouveau ou de le renvoyer en-têtes, pas besoin de "pas de données" allers-retours, etc"). Cette a été discuté un certain nombre de fois.
AJAX pour le RESTE?
Une meilleure utilisation de l'AJAX est le REPOS des appels d'API. Cette utilisation simplifie le code de base et empêche la connexion Websocket de blocage (en particulier sur les moyennes des données de téléchargements).
Il y a un certain nombre de impérieuses raisons de préférer l'AJAX pour le REPOS des appels d'API et les données uploadées:
L'API AJAX était pratiquement conçu pour le REPOS des appels d'API et il est un grand ajustement.
RESTE les appels et les envois à l'aide d'AJAX sont nettement plus facile à code, à la fois sur le client et le serveur.
Comme charge utile de données augmente, Websocket connexions pourrait se bloquer à moins de fragmentation de message /multiplexage logique est codé.
Si un envoi est effectué en un seul Websocket
send
appel, il pourrait bloquer un Websocket flux jusqu'à ce que le téléchargement soit terminé. Cela permettra de réduire les performances, en particulier sur les plus lents clients.Une conception commune utilise de petites bidi messages transférés sur les Websockets tandis que le RESTE et les données uploadées (du serveur vers le client) l'effet de levier de l'AJAX facilité d'utilisation pour éviter les Websocket de blocage.
Cependant, sur les grands projets, la flexibilité offerte par les Websockets et l'équilibre entre la complexité du code et de la gestion des ressources feront pencher la balance en faveur des Websockets.
Par exemple, Websocket en fonction uploads pourrait offrir la possibilité de reprendre les gros téléchargements après une connexion est supprimé et ré-établi (rappelez-vous que 5 GO film que vous avez voulu télécharger?).
Par le codage de télécharger la fragmentation logique, il est facile de reprendre un téléchargement interrompu (la partie la plus difficile a été de codage de la chose).
Ce sur HTTP/2 boutons?
Dois-je ajouter que le HTTP/2 push n'est pas (et ne peut probablement pas) remplacer les Websockets.
Cela avait été discuté ici avant, mais il suffit de mentionner que d'un seul HTTP/2 connexion au service de l'ensemble de navigateur (tous les onglets/fenêtres), de sorte que les données poussé par HTTP/2 ne sait pas qui l'onglet/fenêtre elle appartient, à éliminer la capacité de remplacer les Websocket la capacité à envoyer des données directement à un navigateur à onglet /fenêtre.
Tandis que les Websockets sont grands pour les petits de données bi-directionnel de la communication, l'AJAX était encore un certain nombre d'avantages, surtout en tenant compte des charges utiles plus importantes (téléchargements, etc').
Et De La Sécurité?
Bien, en général, plus de confiance et de contrôle est offert à un programmeur, le plus puissant de l'outil... et plus de sécurité préoccupations qui fluage en place.
AJAX par la nature aurait la haute main, puisque c'est la sécurité est intégrée dans le navigateur de code (ce qui est parfois discutable, mais il est toujours là).
D'autre part, les appels AJAX sont plus sensibles à "l'homme du milieu", les attaques, tandis que les Websockets les questions de sécurité sont généralement des bugs dans le code de l'application, qui a introduit une faille de sécurité (généralement backend d'authentification logique est là que vous trouverez ces).
Personnellement je ne trouve pas que cela soit vraiment une différence, si quoi que ce soit je pense que les Websockets sont un peu mieux, surtout quand vous savez ce que vous faites.
Mon Humble Avis
À mon humble avis, je voudrais utiliser les Websockets pour tout, mais le RESTE des appels d'API. Big data uploads je voudrais fragment et de l'envoyer sur les Websockets lorsque cela est possible.
D'interrogation, à mon humble avis, devrait être interdite par la loi, le coût du trafic réseau est ignoble et Websocket push est assez facile à gérer, même pour les nouveaux développeurs.
En plus de problèmes avec les anciens navigateurs (y compris IE9, comme les WebSockets seront pris en charge à partir de IE10), il y a encore de gros problèmes avec les intermédiaires du réseau pas encore de soutenir les WebSockets, y compris transparent proxy, reverse proxy, et les équilibreurs de charge.
Il y a quelques opérateurs mobiles que de bloquer complètement les WebSocket de la circulation (qui est, d'après le site HTTP commande de MISE à niveau).
Avec les années passant, les WebSockets sera de plus en plus pris en charge, mais en attendant, vous devriez toujours avoir un HTTP automne méthode de retour pour l'envoi de données à l'navigateurs.
Plus de la plaignante j'ai lu sur les websockets et de la sécurité est à partir de fournisseurs de solutions de sécurité du navigateur web de sécurité et de pare-feu de sécurité des outils. Le problème est qu'ils ne savent pas comment faire l'analyse de la sécurité des websockets de la circulation, parce qu'une fois il a fait la mise à niveau à partir de l'adresse HTTP de la websocket protocole binaire, le contenu des paquets, et sa signification est spécifique à l'application (basé sur ce que vous programme). C'est évidemment un cauchemar logistique pour ces entreprises dont la subsistance est basée sur l'analyse et la classification des tout votre trafic internet. 🙂
WebSockets ne fonctionnent pas dans les navigateurs plus anciens, et ceux qui ne la soutiennent ont souvent différentes implémentations. C'est à peu près la seule bonne raison pour laquelle ils ne sont pas utilisés tout le temps à la place de l'AJAX.
Websockets sont un excellent choix pour le traitement à long terme bidirectionnel de diffusion de données en quasi temps réel, de manière, alors que le RESTE est idéal pour des communications occasionnelles. Utiliser les websockets est un investissement considérable, il est donc inutile pour des connexions.
Vous pouvez trouver que les Websockets faire mieux lors de fortes charges sont présents, HTTP est légèrement plus rapide dans certains cas, car il peut utiliser la mise en cache. La comparaison RESTE avec les Websockets, c'est comme comparer des pommes à des oranges.
Nous devons vérifier ce qui assure une meilleure solution pour notre application, celle qui convient le mieux dans notre cas d'utilisation victoires.
Un exemple de la différence entre HTTP et les Websockets dans la forme de la taille du client lib qui peut gérer Websocket point de terminaison comme des Api REST et Reposant extrémités comme les Websockets sur le client.
https://github.com/mikedeshazer/sockrest
Aussi, pour ceux qui essaient de consommer une API websocket sur un client ou vice versa, la façon dont ils sont utilisés pour. L'libs/sockrest.js assez bien fait clairement la différence (ou plutôt est supposé).