Selepas menggunakan React, proses pemaparan Paparan daripada data agak mudah,
Tetapi aplikasi yang lebih praktikal memerlukan sokongan pelayan, berbilang pengguna, penyegerakan masa nyata, dsb.,
Saya menghadapi beberapa masalah dalam amalan sedia ada (saya tidak begitu biasa dengan seni bina bahagian belakang, jadi saya melihatnya dari perspektif bahagian hadapan):
Apabila menyimpan data di bahagian pelayar, kadangkala data luaran hanya boleh ditangkap dari pelayan,
Pelayan tidak selalu tahu data apa yang diperlukan oleh penyemak imbas
Pelayar mempunyai sandaran data, yang perlu diselenggara secara manual, sentiasa dikemas kini dengan pelayan, dll.
Operasi serupa juga akan dilakukan apabila pelayan menolak data, jadi akan terdapat kod pendua pada kedua-dua belah pihak
Jadi saya sedang memikirkan penyelesaian untuk menjadikan keseluruhan proses lebih jelas dan mudah (untuk aplikasi kecil, prestasi tidak dipertimbangkan dahulu):
Operasi data dilakukan pada bahagian pelayar, dan semua perubahan dibuat berdasarkan data yang ditolak oleh pelayan
Dengan kata lain, akan ada data lengkap yang diperlukan oleh pengguna pada pelayan, dan penyemak imbas hanya akan menyegerakkan secara pasif
Pelayan menyimpan semua status semasa setiap pengguna, seperti jadual mana penyemak imbas pergi, dsb.
Dengan cara ini pelayan boleh mengira semua data yang diperlukan untuk pengguna semasa
Tindakan berkaitan data pelanggan semuanya dihantar ke pelayan melalui WebSocket dan diproses oleh pelayan,
Pelayan mengemas kini sandaran data tempatan melalui jsonpatch dan WebSocket
Saya sudah lama memikirkan idea ini, tetapi saya belum mula mendalaminya. Pernahkah rakan sekelas memikirkan rancangan sedemikian?
Juga ambil perhatian bahawa senario yang saya pertimbangkan adalah aplikasi kecil di mana berpuluh-puluh orang berada dalam talian pada masa yang sama...
Ini tidak sepatutnya dianggap sebagai jawapan, mari kita bincangkan bersama. Saya rasa saya tidak faham beberapa perkara yang anda terangkan, jadi saya akan bertanya dahulu untuk memastikan kami berada di halaman yang sama:
Tunggu sebentar, apabila mengambil data dari pelayan, tidakkah anda perlu mengisytiharkan jenis permintaan? Mengapakah pelayan perlu "mengetahui" data yang diperlukan oleh penyemak imbas? Maksud saya, dengan mengandaikan data cache anda tiada (katakan) "maklumat pengarang", maka ia sepatutnya
GET /author/:id
betul? Bagaimanakah ini bermakna pelayan "tidak sentiasa mengetahui" data yang diperlukan oleh penyemak imbas? Bolehkah anda memberi contoh untuk menjelaskan maksud anda?GET /author/:id
对吗?这样怎么会变成服务器“并不总是知道”浏览器需要什么数据?能否举一个例子说清楚你的意思?我觉得“推送”就意味着:浏览器其实不知道数据有更新,服务器知道,所以服务器推给浏览器更新后的数据。而你在浏览器手动维护的数据则意味着:你知道数据变化了,所以才要手动维护,并且要提交给服务器以同步数据。
你不觉得这两者恰好是一条线的两端,其实不矛盾吗?为什么会有重复代码?你指的是用于同步数据的代码?
所以你所思考的方案:
那……这和我直接
GET /author/5
Pelayar mempunyai sandaran data, yang memerlukan penyelenggaraan manual, sentiasa dikemas kini dengan pelayan, dsb. Operasi serupa juga akan dilakukan apabila pelayan menolak data, jadi akan terdapat kod pendua di kedua-dua belah pihak
Adakah ini bermakna pelanggan tidak menyimpan data cache? Selagi terdapat operasi perubahan data, data lengkap akan diperolehi daripada pelayan serta-merta (atau dengan kata lain, jika pengguna melakukan operasi, kemas kini data akan ditolak kepada semua pelanggan lain dengan serta-merta)? 🎜 🎜 🎜 🎜...Data dari jadual mana
Jika saya faham dengan betul, apa yang anda maksudkan ialah dengan mengandaikan saya pengguna A dan saya melihat maklumat
/author/5
, mesti ada mekanisme kursor pada pelayan yang menunjukkan: "Pengguna A sedang menyemak imbas jadual pengarang dengan id 5", bukan? Dalam erti kata lain, setiap kali URL berubah, ia harus menghantar "lokasi semasa saya" ke pelayan, dan kemudian pelayan akan menolak data yang sepadan kepada saya Adakah ini yang anda maksudkan? 🎜 🎜 🎜Kemudian...berapa besar perbezaan antara ini dan saya mendapatkan data terus melaluiGET /author/5
? 🎜 🎜 🎜Saya dapat melihat bahawa anda mempunyai pemikiran anda sendiri tentang perkara yang anda gambarkan, tetapi saya rasa adegan itu masih terlalu kabur. Saya ingin mendengar perkara yang lebih spesifik Apakah masalah yang telah diselesaikan menggunakan senario tertentu sebagai contoh? 🎜Komunikasi antara pelayan dan pelayar perlu berdasarkan spesifikasi Komunikasi antara backend dan fontend sangat penting dalam pembangunan aplikasi
Malah, data perniagaan akhirnya mesti disimpan pada pelayan, dan pangkalan data (mysql, dll.) menyediakan perkhidmatan sedemikian. Data berinteraksi antara pelayan dan klien Secara ringkasnya, data penyemak imbas boleh dipanggil cache. Julat cache sangat luas, last_modified dan etag juga antara cache, serta cache di dalam aplikasi pelayan
Bagi kod berulang, ia sebenarnya mungkin disebabkan oleh pembahagian kerja yang tidak jelas antara bahagian belakang dan hujung fon, dan seni bina teknikal. Walau bagaimanapun, kadangkala projek membenarkan penduaan kod untuk bermula dengan cepat. Ia boleh dibina semula perlahan-lahan kemudian. Pada peringkat awal, anda hanya boleh memilih berdasarkan tahap teknikal semasa, dan anda tidak seharusnya terlalu mendalami teknologi, menyebabkan projek tidak dapat disiapkan mengikut jadual
Aplikasi semuanya seperti ini, dan data akhirnya mendarat di pelayan.
Secara umumnya, pelayan direka bentuk tanpa kewarganegaraan Ini akan menjadi keperluan untuk pengembangan pelayan apabila projek itu berkembang pada masa hadapan. Apabila penyemak imbas memerlukan data, ia pergi ke pelayan untuk mendapatkan data Pelayan menyediakan data mengikut parameter dan protokol antara muka yang dihantar oleh penyemak imbas, dan penyemak imbas boleh mengetahui jadual dan kedudukan pengguna semasa dengan mudah. Sebagai contoh, laman web Sina Weibo mengambil inisiatif untuk menarik data daripada pelayan apabila ia mencapai penghujung halaman Selepas mencapai jumlah tertentu, ia mengambil pautan halaman seterusnya untuk mendapatkan halaman data seterusnya.
Pelaksanaan teknologi ini terutamanya berkaitan dengan senario aplikasi Websocket sesuai untuk sambungan yang panjang untuk mendapatkan data. Jika anda hanya mengemas kini data secara amnya, sudah cukup untuk menggunakan protokol http biasa.