Apa permintaan AJAX tersembunyi?
Saya perhatikan peningkatan penggunaan permintaan AJAX tersembunyi yang dirancang untuk membuat tindakan pengguna tampak terjadi segera. Saya akan merujuk jenis permintaan AJAX ini sebagai non-pemblokiran. Ini adalah permintaan AJAX yang dibuat tanpa pengguna sadari itu terjadi, itu dilakukan di latar belakang dan operasinya tidak bersuara ( tidak ada kata kerja yang menunjukkan penyelesaian panggilan AJAX yang berhasil ). Tujuannya adalah untuk membuat operasi tampak telah terjadi segera ketika itu benar-benar belum selesai.
Berikut adalah contoh permintaan AJAX yang tidak menghalangi;
- Klik pengguna dihapus pada kumpulan email. Item menghilang segera dari kotak masuk mereka, dan mereka dapat melanjutkan dengan operasi lain. Sementara itu, permintaan AJAX sedang memproses penghapusan item di latar belakang.
- Pengguna mengisi formulir untuk catatan baru. Klik simpan. Item baru segera muncul dalam daftar. Pengguna dapat terus menambahkan catatan baru.
Untuk memperjelas, berikut adalah contoh pemblokiran permintaan AJAX;
- Klik pengguna dihapus pada kumpulan email. Kursor jam pasir muncul. Permintaan AJAX dibuat, dan ketika merespons kursor jam pasir dimatikan. Pengguna harus menunggu sebentar agar operasi selesai.
- Pengguna mengisi formulir untuk catatan baru. Klik simpan. Bentuknya berubah abu-abu dengan loader AJAX yang bergerak. Sebuah pesan ditampilkan "Data Anda telah disimpan", dan catatan baru muncul dalam daftar.
Perbedaan antara kedua skenario di atas adalah bahwa pengaturan AJAX yang tidak memblokir tidak memberikan umpan balik dari kinerja yang beroperasi, dan pengaturan AJAX yang memblokir tidak.
Risiko Permintaan AJAX Tersembunyi
Risiko terbesar dari gaya permintaan AJAX ini adalah bahwa aplikasi web bisa dalam keadaan yang sama sekali berbeda ketika permintaan AJAX gagal.
Misalnya, contoh non-pemblokiran;
- Pengguna memilih banyak email. Klik tombol hapus. Operasi tampaknya segera terjadi (item hilang begitu saja dari daftar). Pengguna kemudian mengklik tombol tulis dan mulai mengetik email baru. Pada saat inilah kode JavaScript menemukan permintaan AJAX gagal. Script dapat menampilkan pesan kesalahan, tetapi sebenarnya tidak ada gunanya saat ini.
Sebagai alternatif, contoh pemblokiran;
- Pengguna memilih banyak email. Klik tombol hapus. Melihat satu jam kaca, tetapi operasi gagal. Mereka mendapatkan pesan kesalahan yang mengatakan "kesalahan. Blah blah blah". Mereka dikembalikan ke daftar email, dan mereka masih memiliki email yang ingin mereka hapus. Mereka dapat mencoba menghapusnya lagi.
Ada juga risiko teknis lainnya untuk melakukan permintaan AJAX yang tidak menghalangi. Pengguna dapat menutup browser, dapat menavigasi ke situs web lain dan mereka dapat menavigasi ke lokasi lain di web saat ini yang membuat konteks respons kesalahan apa pun menjadi tidak berarti.
Jadi mengapa ia menjadi begitu populer?
Facebook, Google, Microsoft, dll. Dll. Semua domain besar ini semakin menggunakan permintaan AJAX yang tidak menghalangi untuk membuat operasi tampak bahwa mereka dilakukan secara instan. Saya juga melihat peningkatan editor formulir yang tidak memiliki tombol simpan atau kirim . Segera setelah Anda meninggalkan bidang atau tekan enter. Nilai disimpan. Tidak ada profil Anda yang diperbarui pesan atau langkah penyimpanan.
Permintaan AJAX bukanlah suatu kepastian, dan seharusnya tidak diperlakukan sebagai berhasil sampai mereka selesai, tetapi begitu banyak aplikasi web utama beroperasi begitu saja.
Apakah situs web ini yang menggunakan panggilan AJAX non-pemblokiran untuk mensimulasikan aplikasi responsif mengambil risiko yang tidak perlu dengan biaya muncul dengan cepat?
Apakah ini pola desain yang harus kita semua ikuti agar tetap kompetitif?
sumber
Jawaban:
Ini bukan kinerja "palsu" yang terlalu responsif. Ada beberapa alasan mengapa itu populer:
sumber
Mengasumsikan sesuatu akan berfungsi dan menampilkan kesalahan jika gagal di sisi jauh lebih ramah pengguna daripada memblokir pengguna dari melakukan hal lain sampai ada respons dari server.
Klien email sebenarnya adalah contoh yang bagus untuk ini: Ketika saya memiliki daftar dengan 5 email dan yang teratas dipilih, saya berharap bahwa ketika menekan DELtiga kali tiga email pertama dihapus. Dengan "nonblocking AJAX" ini berfungsi dengan baik - setiap kali saya menekan tombol, email yang dipilih segera dihapus. Jika terjadi kesalahan, ditampilkan dan email yang tidak terhapus dengan benar ditampilkan lagi ATAU halaman dimuat ulang untuk menghilangkan keadaan lokal yang tidak konsisten.
Jadi dalam kasus yang paling umum - itu adalah kesuksesan - itu meningkatkan kegunaan. Dalam kasus yang jarang terjadi - kegagalan - kegunaan didegradasi (elemen yang dihapus muncul lagi atau aplikasi "restart") tetapi ketika membuat aplikasi Anda biasanya ingin memiliki kegunaan terbaik untuk kasus-kasus umum, bukan dalam hal kesalahan.
sumber
Para pengguna tidak peduli dengan apa yang dilakukan perangkat lunak Anda di belakang layar: mereka ingin tindakan mereka memiliki dampak yang terlihat, dan dapat bekerja sesuai kecepatan mereka.
Jika suatu tindakan berhasil di sisi klien - seperti menghapus email - itu tugas Anda untuk membuatnya berhasil di sisi server juga. Mengapa penghapusan gagal? Jika itu disebabkan oleh beberapa jenis pembatasan (misalnya, Anda tidak dapat menghapus email yang telah diarsipkan), pengguna harus mengetahui hal itu sebelum tindakannya gagal.
Jika kesalahan disebabkan oleh sesuatu yang lebih parah (misalkan terjadi kerusakan basis data), Anda harus memiliki cara untuk menyimpan operasi dan mencoba kembali ketika sistem menyala lagi.
Contoh pengelolaan yang baik adalah cara Facebook menangani obrolan. Tidak ada cara untuk menghentikan pengguna dari memutuskan tiba-tiba, yang berarti mereka tidak akan dapat membaca pesan yang Anda kirim sebelum mereka pergi. Alih-alih menampilkan kesalahan, sistem menyimpan semua pesan itu dan membuatnya tersedia bagi pengguna ketika ia kembali. Tidak ada data yang hilang.
sumber
Anda dapat berkompromi antara dua opsi. Misalnya, jika pengguna menghapus email, Anda bisa menandainya merah atau abu-abu sampai Anda mendapatkan konfirmasi kembali dari server, dan hanya kemudian menghapusnya dari daftar. Pengguna masih dapat melakukan hal-hal lain saat satu tindakan tertunda, sehingga tidak memblokir, tetapi masih menyisakan sedikit pengingat bagi pengguna bahwa tindakan mereka belum dilakukan.
Amazon AWS mengambil pendekatan ini: ketika Anda menghentikan / memulai sebuah instance, kotak centang yang memungkinkan Anda untuk memilihnya berubah menjadi pemintal (sehingga Anda tidak dapat melakukan apa pun untuk itu selama beberapa detik), tetapi ini tidak menghalangi Anda dari berinteraksi dengan contoh lain.
sumber
Saya pikir, ini datang bersama dengan semakin banyak situs web yang mencoba berperilaku seperti Aplikasi dan melakukan lebih banyak pemrosesan di browser (seperti memvalidasi data formulir) daripada situs yang lebih tradisional. Saya tidak melihat terlalu banyak masalah selama kode Anda dapat diandalkan dan Anda dapat mengharapkannya berhasil dalam kondisi normal.
Anda mengatakan "Ini saat ini bahwa kode JavaScript menemukan permintaan AJAX gagal. Skrip dapat menampilkan pesan kesalahan, tetapi saat ini benar-benar tidak ada gunanya."
Mengapa itu tidak ada gunanya? Anda dapat kembali ke daftar EMail dan melakukan penghapusan lagi. Kenapa harus menunggu saja? Sebenarnya tidak ada banyak "risiko" dan mereka tidak "tampak" cepat, mereka sebenarnya bekerja lebih cepat. Jadi kalau aktivitasnya tidak "kritis" kenapa harus lambat?
sumber
2c saya adalah: ada situasi di mana lebih baik untuk memiliki, seperti yang Anda katakan, "non-blocking" operasi Ajax dan lain-lain di mana itu adalah pilihan desain yang buruk. Contoh: memilih video YouTube. Anda tidak benar-benar ingin bagian halaman diblokir saat Anda mengklik pada sedikit mulai di sana. Lebih baik gagal secara diam-diam. Bahkan pesan konfirmasi akan dibunuh berlebihan. Namun contoh Anda dengan penghapusan email, saya akan memenuhi syarat sebagai wajib untuk memblokir permintaan tipe Ajax.
Mongo DB melakukan sesuatu seperti itu (dan ini dapat dianggap sebagai contoh aplikasi Desktop). Mereka memiliki berbagai "Tulis Masalah" untuk operasi mereka, dan Anda dapat mengonfigurasinya ke nilai yang berbeda untuk setiap operasi, mulai dari "segera kembali dan jangan menunggu apa pun" hingga "diblok sampai Anda telah mengkonfirmasi transfer jaringan yang berhasil dan lalu kembali "ke" tunggu hingga konten dijadwalkan dengan benar untuk penulisan disk pada mesin jarak jauh sebelum Anda kembali ". Jelas, jika Anda membuat klien tebal Desktop (seperti C ++) menggunakan driver Mongo, Anda akan mengatur masalah penulisan paling ringan untuk operasi db dari "kekritisan" minimal (seperti memeriksa email baru), dan yang lainnya pada masalah penulisan yang lebih ketat .
Sementara saya melihat manfaat Ajax yang tidak menghalangi, saya setuju dengan Anda bahwa itu terjadi terlalu banyak. Pada suatu titik ada setidaknya satu situs "jejaring sosial" terkenal yang akan melakukan ini untuk mengunggah foto. Anda telah memilih foto Anda untuk diunggah dan kemudian di-bam, segera itu akan memberi tahu Anda bahwa itu selesai, dan kemudian cukup yakin pada hari berikutnya ketika Anda ingin menambahkan beberapa foto lagi (atau menggunakan yang menurut Anda sudah Anda tambahkan), itu tidak pernah ditemukan. Kemudian mereka menyerah pada hal ini, dan benar-benar meluangkan waktu untuk menunggu tanggapan (dan Anda memang terkadang mendapatkan pesan seperti "gagal mengunggah foto, coba nanti").
sumber