Gesaan dan senario yang berkenaan
Editor tugas memaparkan tajuk yang dihantar serta-merta. Pengguna boleh menghantar tajuk A dan kemudian tajuk B sebelum mana-mana permintaan selesai. Respons kedua mungkin tiba dahulu, salah satu permintaan mungkin gagal, pengambilan semula (refetch) latar belakang mungkin selesai semasa kedua-duanya masih tergantung, dan pengguna lain mungkin mengemas kini tugas yang sama. Pelayan mengembalikan tugas kanonikal dan versi sumber yang meningkat secara monotonik selepas setiap penulisan yang diterima.
Reka bentuk keadaan klien, kontrak permintaan, dasar susunan, pemulihan kegagalan, pengalaman konflik, maklum balas kebolehcapaian dan pelan pengesahan. Keperluannya bukan sekadar membuatkan antara muka terasa pantas. Selepas setiap susunan penyelesaian, keadaan yang kelihatan mestilah boleh dijelaskan daripada keadaan pelayan yang autoritatif ditambah dengan niat (intents) pengguna yang masih tergantung.
Soalan ini sesuai untuk temu duga frontend kanan, infrastruktur UI dan reka bentuk sistem frontend. Bahan temu duga frontend awam merangkumi kemas kini optimistik, perlumbaan permintaan (request races), keadaan ralat dan rollback secara eksplisit, manakala rekod temu duga awam 2025 menerangkan soalan susulan mengenai prinsip dan kes penggunaan kemas kini optimistik. Sumber-sumber tersebut menyokong kerelevanan topik ini pada masa kini; ia tidak menetapkan soalan khusus syarikat atau kekerapan temu duga. Kategorinya ialah frontend kerana tugas terasnya ialah keadaan tak segerak (async state) bahagian penyemak imbas dan reka bentuk interaksi. Kawalan konkurensi pelayan ialah input kepada reka bentuk tersebut, bukan sasaran pelaksanaan utama.
Perkara yang dinilai oleh penemu duga
Isyarat pertama ialah sama ada calon memisahkan keadaan autoritatif daripada keadaan spekulatif. Menggantikan satu objek dalam cache dan menyimpan snapshot lama untuk rollback berfungsi untuk satu permintaan yang terasing. Ia gagal apabila kerja optimistik yang terkemudian bergantung pada objek yang sama. Model yang teguh mengekalkan pangkalan yang disahkan terkini dan koleksi niat tergantung yang tersusun, kemudian menerbitkan paparan yang dipaparkan daripada kedua-duanya.
Isyarat kedua ialah semantik mutasi. "Kekalkan hanya respons terkini" melindungi satu laluan render klien, tetapi ia tidak dapat menghalang permintaan yang lebih lama daripada diproses paling akhir oleh pelayan. Calon mesti memutuskan sama ada operasi disiri (serialized), digabungkan (coalesced), dijadikan komutatif, atau diberikan susunan yang dikuatkuasakan oleh pelayan. Pilihan ini berbeza untuk "tetapkan tajuk kepada B," "tambah sebanyak satu," "togol," "padam," dan arahan pembayaran.
Isyarat ketiga ialah pemulihan terpilih. Apabila operasi A gagal selepas operasi B dihantar, memulihkan snapshot dari sebelum A boleh memadamkan B. Jawapan yang kukuh membuang atau menandakan operasi yang gagal, memajukan pangkalan yang disahkan hanya daripada respons autoritatif yang sah, dan memainkan semula (replay) niat yang tinggal. Jika konflik versi pelayan menjadikan mainan semula tidak selamat, UI memaparkan nilai pelayan semasa dan meminta penyelesaian yang disengajakan.
Isyarat terakhir ialah disiplin pengeluaran: keadaan tergantung dan ralat kekal boleh dikendalikan dengan papan kekunci dan teknologi bantuan; pembatalan tidak disalah anggap sebagai rollback pelayan; dan ujian memaksa setiap susunan respons, susunan kegagalan, perlumbaan refetch, percubaan semula (retry) dan konflik berbanding hanya mengesahkan laluan gembira (happy path).
Soalan untuk dijelaskan sebelum menjawab
- Apakah maksud sesuatu operasi?
setTitle("B")mutlak boleh menggantikan draf tajuk yang lebih awal, manakalaincrement(1)mungkin memerlukan kedua-dua operasi dilakukan. Arahantoggle()adalah samar-samar di bawah percubaan semula; nilai sasaran yang eksplisit adalah lebih selamat. Semantik operasi menentukan sama ada penggabungan adalah sah. - Bolehkah pengguna menghantar lagi semasa penyimpanan masih tergantung? Melumpuhkan kawalan memberikan penyirian mudah tetapi mungkin menjejaskan pengalaman penyuntingan. Jika input berterusan diperlukan, kekalkan draf tempatan secara berasingan dan sama ada beratur/gabungkan penghantaran atau gunakan protokol selari berversi.
- Sistem manakah yang menentukan susunan penulisan? Jika pelayan hanya menawarkan penulisan tanpa syarat siapa-tiba-terakhir-menang, klien mesti menyirikan penyimpanan yang bergantung pada susunan. Jika API menerima versi pangkalan atau jujukan klien dan menolak kerja lapuk, keselarian terkawal menjadi mungkin.
- Adakah tindakan optimistik boleh diterbalikkan dan berisiko rendah? Suka (likes), label dan draf selalunya sesuai untuk maklum balas optimistik. Pembayaran, tindakan pemusnahan, perubahan sensitif kebenaran dan tindakan dengan kesan luaran yang tidak boleh diterbalikkan mungkin memerlukan pengesahan atau keadaan tergantung dan bukannya berpura-pura berjaya.
- Bolehkah sumber latar belakang mengemas kini rekod yang sama? Pengambilan semula (refetches), langganan, tab penyemak imbas lain dan kolaborator boleh mengubah pangkalan. Model keadaan mesti mengenal pasti versi sumber dan menentukan sama ada niat tergantung boleh dimainkan semula dengan selamat pada pangkalan yang lebih baharu.
- Apakah yang mesti dilihat/disedari oleh pengguna? Jelaskan sama ada baris individu memerlukan penunjuk tergantung, cuba semula dan konflik; sama ada fokus boleh beralih; dan mesej penyimpanan atau kegagalan yang mana mesti diumumkan tanpa menghasilkan mesej live-region untuk setiap ketukan kekunci.
Rangka kerja jawapan 30 saat
"Saya akan mengekalkan tugas yang disahkan pelayan terkini sebagai pangkalan dan mewakili setiap penghantaran tempatan sebagai niat yang dikenal pasti. UI merender niat tergantung di atas pangkalan tersebut. Untuk penggantian tajuk, pilihan lalai saya ialah satu simpanan dalam penerbangan (in-flight) bagi setiap tugas dan menggabungkan draf yang beratur kepada tajuk terkini; ID permintaan sahaja tidak dapat menghalang pelayan daripada menggunakan permintaan lama pada saat akhir. Apabila berjaya, saya menerima pakai versi kanonikal yang dikembalikan, membuang niat tersebut dan memainkan semula sebarang niat yang tinggal. Sekiranya gagal, saya hanya membuang niat yang gagal, bukan memulihkan keseluruhan snapshot lapuk. Konflik versi menjeda mainan semula automatik dan menunjukkan kedua-dua nilai. Saya akan mendedahkan status tergantung dan ralat bagi setiap item, mengekalkan fokus, dan menguji respons yang disusun semula, campuran kejayaan dan kegagalan, perlumbaan refetch, percubaan semula, konflik dan pemulihan luar talian."
Perbincangan mendalam langkah demi langkah
1. Tentukan satu invarian sebelum memilih pustaka
Bagi setiap sumber, simpan base yang disahkan dan senarai pending yang tersusun. Setiap entri tergantung mempunyai ID operasi klien yang stabil, niat dan muatan (payload), susunan penghantarannya, serta status semasanya. Keadaan yang dipaparkan ialah unjuran tulen:
view = fold(base, pending in logical order, applyIntent)Invariannya ialah: paparan yang dirender adalah sama dengan keadaan pelayan diterima yang terbaharu ditambah dengan setiap niat tempatan yang masih layak untuk digunakan. Model ini menjadikan refetch atau respons yang lewat sebagai input kepada penyelarasan dan bukannya arahan untuk menulis ganti skrin.
Corak reducer optimistik React menyokong pemisahan yang sama: apabila nilai pangkalan berubah semasa Action sedang tergantung, React boleh menjalankan semula reducer terhadap pangkalan baharu. Pustaka cache boleh mengurus panggilan balik kitaran hayat mutasi, tetapi ia tidak memilih semantik operasi produk. Invarian ini kekal berguna sama ada pelaksanaannya menggunakan keadaan React, TanStack Query, cache klien lain, atau stor tersuai.
Jangan kekalkan tiga salinan yang tidak berkaitan yang dipanggil serverTask, formTask, dan optimisticTask dengan kesan penyegerakan ad hoc. Asingkan draf borang yang belum dihantar kerana menaip belum lagi menjadi mutasi. Sebaik sahaja dihantar, tukarkannya kepada niat dengan identiti yang stabil.
2. Pilih susunan daripada operasi, bukan daripada kependaman (latency)
Terdapat tiga dasar yang berguna:
| Dasar | Kes yang sesuai | Kos atau risiko |
|---|---|---|
| Sirikan setiap sumber | Penulisan bergantung susunan; API tiada kawalan susunan | Kerja terkemudian menunggu, tetapi susunan pelayan boleh dibuktikan |
| Sirikan dan gabungkan | Hanya nilai terkini yang belum dihantar penting, seperti penghantaran tajuk berulang | Nilai perantaraan yang dihantar digugurkan secara sengaja |
| Selari dengan kontrak pelayan | Operasi bebas atau komutatif, atau API menguatkuasakan versi pangkalan/jujukan klien | Lebih daya pemprosesan (throughput), tetapi penyelarasan dan konflik adalah eksplisit |
Bagi editor tajuk ini, sirikan mengikut ID tugas dan gabungkan perubahan tajuk belum dihantar yang beratur. Jika A sedang dalam penerbangan dan B dihantar, tunjukkan B secara optimistik tetapi kekalkan hanya B sebagai penulisan rangkaian seterusnya. Selepas A selesai, hantar B terhadap versi diterima yang terbaharu. TanStack Query mendokumenkan bahawa mutasi sebaliknya berjalan secara selari dan menyediakan skop mutasi untuk pelaksanaan bersiri; dasar yang sama boleh dilaksanakan tanpa pustaka tersebut.
Permintaan selari selamat hanya dengan semantik yang lebih kukuh. API mungkin menolak versi pangkalan yang lapuk, menerima jujukan klien yang meningkat secara monotonik untuk satu sesi penyuntingan, atau mendedahkan operasi yang benar-benar komutatif. Dokumentasi React juga memberi amaran bahawa Transitions tak segerak tersuai tidak menjamin susunan permintaan; Action tersusun peringkat lebih tinggi atau baris gilir eksplisit masih diperlukan. Menjejaki ID permintaan terbaharu semata-mata dalam penyemak imbas menghalang respons lama daripada menulis ganti B yang kelihatan, tetapi pelayan mungkin masih menyimpan A paling akhir. Membatalkan A juga tidak membuktikan bahawa pelayan tidak melakukannya (commit).
3. Selaraskan kejayaan tanpa mempercayai susunan ketibaan
Setiap respons harus mengenal pasti operasi dan mengembalikan sumber kanonikal berserta versinya. Dengan penyirian, kendalikan operasi aktif, terima pakai pangkalan yang dikembalikan, buang operasi tersebut, kemudian terbitkan paparan dengan memainkan semula niat yang beratur. B yang beratur kekal kelihatan semasa A selesai, jadi skrin tidak melompat kembali kepada A.
Dengan keselarian terkawal, padankan respons dengan ID operasinya dan sahkan versi sumber atau perakuannya. Jangan tetapkan data respons secara langsung semata-mata kerana promise telah selesai (resolved). Respons yang lebih lama daripada versi disahkan semasa tidak boleh menggantikan pangkalan. Buang hanya operasi yang diperakui secara sebenar oleh respons. Jika pelayan mengembalikan transformasi kanonikal, seperti memangkas tajuk, gunakan hasil tersebut sebagai pangkalan baharu sebelum memainkan semula niat tempatan yang terkemudian.
Refetch latar belakang mengikut peraturan yang sama. Jika ia mengembalikan versi 12 manakala pangkalan semasa ialah versi 11, versi 12 boleh memajukan pangkalan; niat tergantung kemudiannya digunakan semula jika semantiknya membenarkannya. Refetch dengan versi 10 ialah bukti lapuk dan tidak boleh menggerakkan pangkalan ke belakang.
4. Pulihkan mengikut operasi, bukan mengikut snapshot
Katakan A dan B kelihatan secara optimistik, kemudian A gagal. Memulihkan objek yang ditangkap sebelum A akan membuang B sebagai kerosakan sampingan. Sebaliknya, tandakan A gagal atau buangnya, kekalkan B, dan kira semula unjuran. Untuk penugasan tajuk mutlak, B masih boleh dihantar terhadap pangkalan semasa. Untuk delta yang bergantung pada susunan, B mungkin perlu menunggu, dikira semula, atau ditolak kerana premis asalnya tidak lagi sah.
Asingkan kegagalan kepada keadaan yang boleh diambil tindakan:
- Kegagalan pengesahan atau kebenaran adalah muktamad sehingga pengguna mengubah input atau akses; tunjukkan nilai yang ditolak dan sebab pelayan berhampiran kawalan.
- Kegagalan rangkaian sementara boleh mendedahkan percubaan semula (retry). Gunakan semula identiti operasi yang sama hanya jika kontrak pelayan menjadikan percubaan semula itu selamat; jika tidak, selaraskan dahulu sama ada penulisan asal telah dilakukan.
- Konflik versi bermakna pangkalan telah berubah di tempat lain. Terima pakai atau ambil nilai pelayan semasa, bandingkannya dengan niat tempatan, dan mainkan semula secara automatik hanya operasi dengan peraturan gabungan yang terbukti. Untuk konflik tajuk, bentangkan nilai semasa dan cadangan dan bukannya memilih satu secara senyap.
- Hasil yang tidak diketahui bermakna permintaan mungkin telah dilakukan walaupun respons telah hilang. "Rollback secara tempatan dan cuba semula sebagai baharu" boleh menduplikasi tindakan bukan idempoten.
Sesetengah tindakan tidak sepatutnya dibuat secara optimistik. Jika kegagalan sukar untuk diundur, mengubah kebenaran, mengenakan bayaran wang, atau mencipta keadaan undang-undang atau perniagaan yang mengelirukan, tunjukkan perakuan tergantung serta-merta dan sahkan hanya selepas pelayan menerimanya.
5. Jadikan keadaan spekulatif kelihatan dan boleh diakses
Optimistik tidak bermakna tidak dapat dibezakan daripada yang disahkan. Tandakan tugas yang terjejas sebagai sedang menyimpan, kekalkan nilai yang dihantar, dan sediakan tindakan cuba semula atau konflik tempatan. Jangan lumpuhkan tugas yang tidak berkaitan. Jika penyirian digunakan, bezakan penyimpanan aktif daripada nilai beratur yang lebih baharu supaya instrumentasi dan mesej ralat dilampirkan pada niat yang betul.
Kekalkan fokus papan kekunci apabila penyimpanan berjaya, gagal, atau cache diselaraskan. Kawasan status boleh mengumumkan "Menyimpan tajuk tugas," "Tajuk tugas disimpan," atau "Penyimpanan gagal" tanpa mengalihkan fokus. Peranan status W3C mempunyai semantik polite live-region; cipta bekas status sebelum perubahan mesej dan elakkan daripada mengumumkan setiap ketukan kekunci. Sambungkan ralat khusus medan kepada medan dan pastikan status visual dapat difahami tanpa bergantung pada warna semata-mata.
6. Uji mesin keadaan dan perhatikan dasar
Uji dasar susunan yang dipilih dan bukannya berpura-pura setiap dasar membenarkan jejak (trace) yang sama. Untuk laluan bersiri, sahkan (assert) bahawa B kelihatan tetapi tidak dihantar sehingga A selesai; kemudian liputi kejayaan atau kegagalan A diikuti oleh kejayaan atau kegagalan B, kehilangan respons diikuti oleh penyelarasan, dan transformasi pelayan. Bagi mana-mana laluan selari yang disokong, gunakan pengangkutan yang boleh dikawal dan stub pelayan untuk memaksa susunan pemprosesan dan respons A-kemudian-B dan B-kemudian-A. Sahkan unjuran yang dirender, operasi yang beratur, versi yang disahkan dan nilai pelayan akhir selepas setiap peristiwa.
Kemudian suntik refetch yang lebih baharu dan lebih lama semasa mutasi tergantung, konflik kolaborator, pemulihan luar talian ke dalam talian, unmount dan remount komponen, penghantaran berulang dan pembatalan selepas pelayan melakukan operasi. Sahkan fokus papan kekunci, pengumuman status, label cuba semula, dan bahawa ralat adalah milik tugas dan operasi yang betul.
Telemetri pengeluaran harus memisahkan kependaman yang dilihat daripada ketepatan: kependaman render optimistik, kependaman pengesahan, kadar kegagalan dan rollback, kadar konflik, masa menunggu baris gilir, kiraan operasi yang digabungkan, kiraan cuba semula dan ketidakpadanan penyelarasan. Antara muka pantas yang sering membetulkan dirinya kepada nilai yang mengejutkan telah gagal memenuhi kontrak produk.
Contoh jawapan berkualiti tinggi
"Saya akan mulakan dengan bertanya sama ada setiap tajuk yang dihantar mesti disimpan atau hanya niat terkini pengguna yang penting. Di sini tajuk terkini adalah penting, API mengembalikan versi sumber, dan saya tidak memerlukan penulisan selari untuk satu tugas. Oleh itu, saya akan membenarkan penyuntingan berterusan tetapi menyirikan penyimpanan rangkaian mengikut ID tugas. Jika A sedang dalam penerbangan dan pengguna menghantar B, skrin menunjukkan B serta-merta dan B menjadi niat beratur yang digabungkan.
Keadaan untuk tugas tersebut mempunyai pangkalan yang disahkan, operasi aktif, dan paling banyak satu niat tajuk yang beratur. Setiap operasi mempunyai ID klien dan versi pangkalan yang akan dihantarnya. Tajuk yang dirender ialah nilai yang beratur, jika tiada nilai optimistik aktif, jika tiada tajuk yang disahkan. Apabila A berjaya, saya menerima pakai tugas kanonikal dan versi daripada responsnya. Saya tidak merender A kerana B masih tergantung; saya menghantar B terhadap versi baharu. Apabila A gagal, saya membuang hanya A dan masih menawarkan untuk menyimpan B jika kegagalan itu bersifat sementara. Kegagalan pengesahan atau kebenaran kekal dilampirkan pada niat yang ditolak.
Jika pelayan melaporkan bahawa pengguna lain telah memajukan versi, saya menghentikan penghantaran automatik, mengambil atau menerima pakai tajuk semasa, dan menunjukkan nilai pelayan serta nilai cadangan untuk penyelesaian. Saya tidak akan bergantung pada tindakan mengabaikan respons lama, kerana itu tidak dapat menghalang permintaan lama daripada menulis paling akhir pada pelayan. Saya juga tidak akan menganggap pembatalan (abort) sebagai rollback.
Setiap tugas mendedahkan status menyimpan, beratur, gagal, atau berkonflik sendiri. Fokus kekal pada editor, dan kawasan status polite sedia ada mengumumkan hasil penghantaran tanpa mengumumkan setiap aksara. Ujian mengawal resolusi promise dan pemprosesan pelayan secara bebas, jadi saya boleh membuktikan UI akhir dan nilai pelayan untuk kejayaan yang disusun semula, campuran kegagalan, refetch lapuk, konflik, respons yang hilang, percubaan semula, pemulihan luar talian dan unmount."
Kesilapan lazim
- Menyimpan satu snapshot pra-mutasi dan memulihkannya pada sebarang ralat → kegagalan terkemudian memadamkan kerja optimistik yang lebih baharu → buang operasi yang gagal dan kira semula daripada pangkalan yang disahkan ditambah dengan niat yang tinggal.
- Mengekalkan hanya ID respons terkini → UI mungkin kelihatan betul manakala pelayan melakukan permintaan yang lebih lama paling akhir → sirikan penulisan yang bergantung pada susunan atau perlukan semantik versi atau jujukan yang dikuatkuasakan oleh pelayan.
- Menggunakan satu bendera pemuatan global → kawalan yang tidak berkaitan membeku dan kegagalan tidak boleh dikaitkan dengan sumbernya → jejaki keadaan tergantung dan ralat mengikut sumber dan ID operasi.
- Menganggap setiap mutasi boleh dimainkan semula → togol, delta, pemadaman dan arahan yang tidak boleh diterbalikkan mempunyai semantik kegagalan yang berbeza → tentukan niat yang eksplisit dan peraturan gabungan sebelum mendayakan tingkah laku optimistik.
- Menganggap pembatalan membatalkan permintaan → pelayan mungkin melakukan operasi sebelum ia menyedari pembatalan → selaraskan keadaan autoritatif dan reka bentuk percubaan semula untuk hasil yang tidak diketahui.
- Membiarkan sebarang pengambilan data menulis ganti cache → refetch lapuk atau respons lewat menggerakkan keadaan disahkan ke belakang → bandingkan versi sumber dan mainkan semula niat tergantung yang sah di atas pangkalan terbaharu.
- Menyembunyikan semua keadaan tergantung untuk menjadikan UI terasa pantas serta-merta → pengguna tidak dapat menjelaskan pembetulan terkemudian atau mencuba semula tindakan yang terjejas → tunjukkan keadaan penyimpanan, kegagalan dan konflik tempatan sambil mengekalkan nilai optimistik.
- Menguji hanya kejayaan dalam susunan penghantaran → perlumbaan paling sukar kekal tidak diuji → kawal susunan respons, susunan pelayan, kegagalan, refetch, percubaan semula dan remount dalam matriks ujian.
Soalan susulan dan jawapan
Apakah yang berubah jika pengguna boleh menyunting di luar talian selama beberapa jam?
Operasi tergantung mestilah tahan lama (durable), dihadkan kepada akaun dan sumber yang disahkan, dan dimainkan semula hanya selepas klien menyegarkan kebenaran dan versi autoritatif. Simpan semantik niat dan ID operasi yang stabil, bukan snapshot UI yang ditangkap. Semasa menyambung semula, ambil pangkalan terlebih dahulu, buang operasi yang dibatalkan oleh pengguna secara eksplisit, dan mainkan semula hanya operasi dengan peraturan gabungan yang sah. Kebenaran yang telah tamat tempoh, sumber yang dipadamkan dan perubahan skema memerlukan keadaan disekat yang kelihatan. Untuk kerjasama luar talian yang lama, baris gilir optimistik mudah mungkin tidak mencukupi; produk mungkin memerlukan operasi gabungan khusus domain atau protokol penyuntingan kolaboratif.
Bolehkah setiap mutasi berjalan secara selari jika pelayan mengembalikan versi?
Tidak. Versi memberitahu klien keadaan mana yang diwakili oleh sesuatu respons, tetapi ia tidak secara automatik menentukan cara dua penulisan harus disusun atau digabungkan. Keselarian adalah selamat apabila pelayan menyemak versi pangkalan yang dihantar secara atomik, menguatkuasakan jujukan, atau mendedahkan operasi bebas atau komutatif. Jika tidak, dua penulisan mutlak masih boleh tiba dan dilakukan dalam susunan yang salah. Penyirian selalunya merupakan kontrak yang lebih jelas untuk satu sumber yang bergantung pada susunan.
Bagaimanakah anda mengendalikan penciptaan optimistik apabila pelayan menetapkan ID sebenar?
Cipta ID klien yang stabil sebelum merender dan gunakannya sebagai identiti operasi dan kunci senarai sementara. Apabila berjaya, rekodkan pemetaan kepada ID pelayan dan gantikan entiti yang disahkan tanpa me-remount baris yang tidak berkaitan. Nyahduplikasi percubaan semula mengikut identiti operasi jika pelayan menyokongnya. Jika penciptaan gagal, buang atau tandakan hanya entiti optimistik tersebut. Operasi terkemudian yang menyasarkan entiti sementara mesti menunggu pemetaan atau dinyatakan dalam baris gilir yang boleh menulis semula sasaran selepas pengesahan.
Bilakah anda secara sengaja memilih UI pesimistik?
Pilihnya apabila memaparkan kejayaan akan mengelirukan pengguna secara ketara, pemulihan bukan bersifat tempatan, konflik kerap berlaku, atau tindakan itu tidak boleh diterbalikkan atau berisiko tinggi. Pembayaran, pemberian kebenaran, penghantaran undang-undang, atau tindakan pemusnahan pukal boleh memperakui klik serta-merta sambil memaparkan keadaan tergantung yang sebenar, kemudian menunjukkan kejayaan hanya selepas pengesahan autoritatif. Antara muka masih boleh berasa responsif tanpa mendakwa hasil yang belum berlaku.