Maju cepat hingga Desember 2017, Websockets didukung oleh (praktis) setiap browser dan penggunaannya sangat umum.
Namun, ini tidak berarti bahwa Websockets berhasil menggantikan AJAX, setidaknya tidak sepenuhnya, terutama karena adaptasi HTTP / 2 sedang meningkat.
Jawaban singkatnya adalah bahwa AJAX masih bagus untuk sebagian besar aplikasi REST, bahkan ketika menggunakan Websockets. Tapi tuhan ada di perinciannya, jadi ...:
AJAX untuk pemungutan suara?
Penggunaan AJAX untuk pemungutan suara (atau pemungutan suara panjang) sedang sekarat (dan seharusnya), tetapi masih digunakan untuk dua alasan yang baik (terutama untuk aplikasi web yang lebih kecil):
Bagi banyak pengembang, AJAX lebih mudah untuk dikodekan, terutama dalam hal pengkodean dan desain backend.
Dengan HTTP / 2, biaya tertinggi yang terkait dengan AJAX (pembuatan koneksi baru) dihilangkan, memungkinkan panggilan AJAX menjadi sangat berkinerja, terutama untuk memposting dan mengunggah data.
Namun, dorongan Websocket jauh lebih unggul daripada AJAX (tidak perlu mengautentikasi ulang atau mengirim ulang tajuk, tidak perlu bolak-balik "tidak ada data", dll.). Ini dibahas beberapa kali.
AJAX untuk REST?
Penggunaan yang lebih baik untuk AJAX adalah panggilan API REST. Penggunaan ini menyederhanakan basis kode dan mencegah koneksi Websocket dari pemblokiran (terutama pada unggahan data berukuran sedang).
Ada sejumlah alasan kuat untuk memilih AJAX untuk panggilan API dan unggahan data:
API AJAX secara praktis dirancang untuk panggilan REST API dan ini sangat cocok.
Panggilan dan unggahan REST menggunakan AJAX secara signifikan lebih mudah untuk dikodekan, baik pada klien dan backend.
Dengan meningkatnya payload data, koneksi Websocket mungkin diblokir kecuali logika fragmentasi / multiplexing pesan dikodekan.
Jika suatu pengunggahan dilakukan dalam satu send
panggilan Websocket , ia dapat memblokir aliran Websocket sampai pengunggahan selesai. Ini akan mengurangi kinerja, terutama pada klien yang lebih lambat.
Desain umum menggunakan pesan bidi kecil yang ditransfer melalui Websockets sementara REST dan unggahan data (klien ke server) memanfaatkan kemudahan penggunaan AJAX untuk mencegah pemblokiran Websocket.
Namun, pada proyek yang lebih besar, fleksibilitas yang ditawarkan oleh Websockets dan keseimbangan antara kompleksitas kode dan manajemen sumber daya akan memberi keseimbangan pada Websockets.
Misalnya, unggahan berbasis Websocket dapat menawarkan kemampuan untuk melanjutkan unggahan besar setelah koneksi terputus dan dibangun kembali (ingat bahwa film 5GB yang ingin Anda unggah?).
Dengan mengkode logika fragmentasi unggahan, mudah untuk melanjutkan kembali unggahan yang terputus (bagian yang sulit adalah mengkode hal tersebut).
Bagaimana dengan push HTTP / 2?
Saya mungkin harus menambahkan bahwa fitur push HTTP / 2 tidak (dan mungkin tidak bisa) menggantikan Websockets.
Ini sudah dibahas di sini sebelumnya, tetapi cukup untuk menyebutkan bahwa satu koneksi HTTP / 2 melayani seluruh browser (semua tab / windows), sehingga data yang didorong oleh HTTP / 2 tidak tahu di mana tab / jendela itu milik, menghilangkan kapasitasnya untuk menggantikan kemampuan Websocket untuk mendorong data secara langsung ke tab / jendela browser tertentu.
Meskipun Websockets sangat bagus untuk komunikasi data dua arah yang kecil, AJAX masih membawa sejumlah keunggulan - terutama ketika mempertimbangkan muatan yang lebih besar (unggah, dll.).
Dan keamanan?
Secara umum, semakin banyak kepercayaan dan kontrol yang ditawarkan kepada seorang programmer, semakin kuat alatnya ... dan semakin banyak masalah keamanan yang muncul.
AJAX secara alami akan berada di atas angin, karena keamanannya dibangun pada kode browser (yang terkadang dipertanyakan, tetapi masih ada).
Di sisi lain, panggilan AJAX lebih rentan terhadap serangan "man in the middle", sementara masalah keamanan Websockets biasanya bug dalam kode aplikasi yang memperkenalkan cacat keamanan (biasanya logika otentikasi backend adalah tempat Anda akan menemukan ini).
Secara pribadi saya tidak menemukan ini sebagai perbedaan besar, jika sesuatu yang saya pikir Websockets sedikit lebih baik, terutama ketika Anda tahu apa yang Anda lakukan.
Pendapatku yang Rendah Hati
IMHO, saya akan menggunakan Websockets untuk semuanya kecuali panggilan API REST. Upload data besar saya akan memecah dan mengirim melalui Websockets jika memungkinkan.
Polling, IMHO, harus dilarang, biaya lalu lintas jaringan mengerikan dan dorongan Websocket cukup mudah untuk dikelola bahkan untuk pengembang baru.