Вперед до грудня 2017 року веб-розетки підтримуються (практично) кожним браузером, і їх використання дуже поширене.
Однак це не означає, що Websockets вдалося замінити AJAX, принаймні не повністю, тим більше, що адаптація HTTP / 2 зростає.
Коротка відповідь полягає в тому, що AJAX як і раніше чудово підходить для більшості програм REST, навіть при використанні Websockets. Але Бог в деталях, так що ...:
AJAX для опитування?
Використання AJAX для опитування (або тривалого опитування) вимирає (і повинно бути), але воно все ще залишається у використанні з двох вагомих причин (головним чином для менших веб-додатків):
Для багатьох розробників AJAX простіше кодувати, особливо якщо мова йде про кодування та проектування бекенда.
Завдяки HTTP / 2 було ліквідовано найвищі витрати, пов'язані з AJAX (встановлення нового з'єднання), що дозволило дзвінкам AJAX бути досить ефективними, особливо для розміщення та завантаження даних.
Однак натиск Websocket набагато перевершує AJAX (не потрібно повторно аутентифікувати чи повторно надсилати заголовки, немає необхідності в зворотній смузі "без даних" тощо) ". Про це неодноразово обговорювали .
AJAX для відпустки?
Краще використовувати для AJAX дзвінки API REST. Це використання спрощує базу коду і запобігає блокуванню з’єднання Websocket (особливо при завантаженні даних середнього розміру).
Є ряд вагомих причин віддати перевагу AJAX для дзвінків REST API та завантаження даних:
API AJAX був практично розроблений для дзвінків REST API, і це чудово підходить.
REST-дзвінки та завантаження за допомогою AJAX значно простіше кодувати, як на клієнті, так і на сервері.
Зі збільшенням корисної навантаження даних з'єднання Websocket можуть заблокуватися, якщо не буде закодована логіка фрагментації / мультиплексування.
Якщо завантаження виконується в одному дзвінку Websocket send
, воно може блокувати потік Websocket, поки завантаження не закінчиться. Це знизить продуктивність, особливо на повільних клієнтах.
Звичайний дизайн використовує невеликі bidi-повідомлення, передані через Websockets, тоді як REST та завантаження даних (клієнт на сервер) сприяють простоті використання AJAX, щоб запобігти блокуванню Websocket.
Однак у великих проектах гнучкість, пропонована Websockets, і баланс між складністю коду та управління ресурсами дозволять змінити баланс на користь Websockets.
Наприклад, завантаження на основі Websocket може запропонувати можливість відновити великі завантаження після відключення та відновлення зв'язку (пам’ятаєте, який фільм на 5 Гб ви хотіли завантажити?).
За допомогою кодування логіки фрагментації завантаження легко відновити перерване завантаження (важка частина кодувала річ).
Що з HTTP / 2 push?
Ймовірно, слід додати, що функція push HTTP / 2 не замінює (і, мабуть, не може) замінити Websockets.
Про це йшлося тут раніше, але достатньо згадати, що одне з'єднання HTTP / 2 обслуговує весь браузер (усі вкладки / вікна), тому дані, що надсилаються HTTP / 2, не знають, до якої вкладки / вікна належить, виключаючи його здатність замінювати здатність Websocket передавати дані безпосередньо на певну вкладку / вікно браузера.
Хоча веб-розетки чудово підходять для невеликих двонаправлених передач даних, AJAX все ж має ряд переваг - особливо, якщо враховувати великі корисні навантаження (завантаження тощо).
А безпека?
Ну, загалом, чим більше довіри та контролю пропонується програмісту, тим потужніший інструмент ... і тим більше проблем з безпекою, які повзають.
AJAX від природи мав би перевагу, оскільки його безпека вбудована в код браузера (що іноді викликає сумніви, але він все ще є).
З іншого боку, виклики AJAX сприйнятливіші до атак "людина в середині", тоді як проблеми безпеки Websockets - це помилки в коді програми, який вніс недолік безпеки (зазвичай логіка аутентифікації бекендера - це їх ви знайдете).
Особисто я не вважаю це великою різницею, якщо що-небудь, я думаю, Websockets трохи краще, особливо коли ви знаєте, що ви робите.
Моя скромна думка
IMHO, я б використовував Websockets для всього, крім викликів REST API. Великі завантаження даних я б фрагментував і надсилав через Websockets, коли це можливо.
Опитування, IMHO, повинно бути поза законом, вартість мережевого трафіку жахлива, а Websocket push досить простий для управління навіть для нових розробників.