Aralık 2017'ye kadar, Websockets her tarayıcı tarafından (neredeyse) desteklenmektedir ve kullanımları çok yaygındır.
Ancak bu, Websockets'in, özellikle HTTP / 2 uyarlaması arttıkça, AJAX'ın yerini almayı başardığı anlamına gelmez.
Kısa cevap, AJAX'ın Websockets kullanırken bile çoğu REST uygulaması için hala harika olmasıdır. Ama tanrı ayrıntılarda, bu yüzden ...:
Yoklama için AJAX?
Yoklama (veya uzun yoklama) için AJAX kullanımı ölüyor (ve olması gerekiyor), ancak yine de iki iyi nedenden dolayı (özellikle daha küçük web uygulamaları için) kullanımda kalıyor:
Birçok geliştirici için, özellikle arka ucun kodlanması ve tasarlanması söz konusu olduğunda, AJAX'ın kodlanması daha kolaydır.
HTTP / 2 ile AJAX ile ilgili en yüksek maliyet (yeni bir bağlantının kurulması) ortadan kaldırılarak AJAX çağrıları, özellikle veri gönderme ve yükleme için oldukça yüksek performans gösterir.
Bununla birlikte, Websocket push , AJAX'tan çok daha üstündür (başlıkların yeniden doğrulanmasına veya yeniden gönderilmesine gerek yoktur, "veri yok" gidiş dönüşlerine gerek yoktur). Bu birkaç kez tartışıldı .
REST için AJAX?
AJAX için daha iyi bir kullanım REST API çağrılarıdır. Bu kullanım, kod tabanını basitleştirir ve Websocket bağlantısının engellenmesini önler (özellikle orta boyutlu veri yüklemelerinde).
REST API çağrıları ve veri yüklemeleri için AJAX'ı tercih etmenin birkaç zorlayıcı nedeni vardır :
AJAX API, REST API çağrıları için pratik olarak tasarlanmıştır ve mükemmel bir seçimdir.
AJAX kullanarak REST çağrılarının ve yüklemelerinin kodlanması, hem istemcide hem de arka uçta önemli ölçüde daha kolaydır.
Veri yükü arttıkça, ileti parçalanması / çoğullama mantığı kodlanmadıkça Websocket bağlantıları engellenebilir.
Bir yükleme tek bir Websocket send
çağrısında gerçekleştirilirse , yükleme bitene kadar bir Websocket akışını engelleyebilir. Bu, özellikle yavaş istemcilerde performansı azaltacaktır.
Yaygın bir tasarım, REST ve veri yüklemeleri (istemciden sunucuya) Websocket'in engellenmesini önlemek için AJAX'ın kullanım kolaylığından yararlanırken Websockets üzerinden aktarılan küçük bidi iletileri kullanır.
Ancak, daha büyük projelerde Websockets tarafından sunulan esneklik ve kod karmaşıklığı ile kaynak yönetimi arasındaki denge Websockets lehine dengeyi değiştirecektir.
Örneğin, Websocket tabanlı yüklemeler, bir bağlantı kesilip yeniden kurulduktan sonra büyük yüklemelere devam etme olanağı sunabilir (yüklemek istediğiniz 5GB filmi hatırlıyor musunuz?).
Yükleme parçalama mantığını kodlayarak, kesintili bir yüklemeye devam etmek kolaydır (zor kısım şeyi kodlardı).
HTTP / 2 push'a ne olacak?
Muhtemelen HTTP / 2 push özelliğinin Websockets yerine geçmediğini (ve muhtemelen yapamayacağını) eklemeliyim.
Bu daha önce burada tartışılmıştı , ancak tek bir HTTP / 2 bağlantısının tüm tarayıcıya (tüm sekmeler / pencereler) hizmet ettiğinden bahsetmek yeterlidir, bu nedenle HTTP / 2 tarafından itilen veriler hangi sekmeye / pencereye ait olduğunu bilmez, Websocket'in verileri doğrudan belirli bir tarayıcı sekmesine / penceresine aktarma yeteneğini değiştirme kapasitesini ortadan kaldırır.
Websockets küçük çift yönlü veri iletişimi için mükemmel olsa da, AJAX hala özellikle daha büyük yükler (yüklemeler vb.) Göz önüne alındığında birçok avantaj taşıyordu.
Peki ya Güvenlik?
Genel olarak, bir programcıya ne kadar çok güven ve denetim sunulursa, araç o kadar güçlü olur ... ve sürünen güvenlik endişeleri artar.
AJAX'ın doğası gereği üstünlüğü vardır, çünkü güvenliği tarayıcının kodunda yerleşiktir (bu bazen tartışmalıdır, ancak hala oradadır).
Öte yandan, AJAX çağrıları "ortadaki adam" saldırılarına karşı daha hassastır, Websockets güvenlik sorunları genellikle bir güvenlik açığı getiren uygulama kodundaki hatalardır (genellikle arka uç kimlik doğrulama mantığı bunları bulacağınız yerdir).
Kişisel olarak, Websockets'in biraz daha iyi olduğunu düşünüyorsanız, özellikle ne yaptığınızı bildiğinizde, bu kadar büyük bir fark bulamıyorum.
Benim Mütevazi Görüşüm
IMHO, REST API çağrıları dışında her şey için Websockets kullanırdım. Büyük veri yüklemeleri Mümkünse Web Soketleri üzerinden parçalayıp gönderirim.
Yoklama, IMHO, yasadışı ilan edilmelidir, ağ trafiğinde maliyet korkunç ve Websocket push yeni geliştiriciler için bile yönetmek için yeterince kolaydır.