Rumah > Soal Jawab > teks badan
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...
滿天的星座2017-05-16 17:08:28
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:
Apabila penyemak imbas menyimpan data cache, kadangkala data luaran hanya boleh ditangkap daripada pelayan, dan pelayan tidak selalu mengetahui data yang diperlukan oleh penyemak imbas
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
对吗?这样怎么会变成服务器“并不总是知道”浏览器需要什么数据?能否举一个例子说清楚你的意思?
浏览器有一份数据备份, 就需要手动维护, 保持跟服务器更新等等、而类似操作在服务器推送数据时也会做, 这样两边就有重复代码
我觉得“推送”就意味着:浏览器其实不知道数据有更新,服务器知道,所以服务器推给浏览器更新后的数据。而你在浏览器手动维护的数据则意味着:你知道数据变化了,所以才要手动维护,并且要提交给服务器以同步数据。
你不觉得这两者恰好是一条线的两端,其实不矛盾吗?为什么会有重复代码?你指的是用于同步数据的代码?
所以你所思考的方案:
浏览器端进行数据的操作, 全部靠服务器推送的数据进行更改
意思是客户端不做数据缓存?只要有数据变更操作就从服务器即时获取完整的数据(或者说,一个用户做了操作就立刻把数据更新推给其他所有的客户端)?
……哪个表的哪个数据
若我没理解错,你的意思是假设我是用户 A,我正在看/author/5
的资料,服务器上应该有一个游标机制注明:“用户 A 正在浏览 authors 表 id 为 5 的数据”,是吗?换句话说,每当 URL 改变的时候就应该发送给服务器“我当前的位置”,然后服务器就把相应的数据推送给我,是这个意思?
那……这和我直接 GET /author/5
🎜Saya rasa "push" bermaksud: penyemak imbas sebenarnya tidak tahu bahawa data telah dikemas kini, pelayan tahu, jadi pelayan menolak data yang dikemas kini ke penyemak imbas. Data yang anda selenggara secara manual dalam penyemak imbas bermaksud: anda tahu bahawa data telah berubah, jadi anda perlu menyelenggaranya secara manual dan menyerahkannya kepada pelayan untuk menyegerakkan data. 🎜 🎜Tidakkah anda fikir kedua-dua ini betul-betul dua hujung baris yang sama, dan ia tidak bercanggah? Mengapa terdapat kod pendua? Adakah anda merujuk kepada kod yang digunakan untuk menyegerakkan data? 🎜 🎜 🎜Jadi penyelesaian yang anda fikirkan: 🎜 🎜 🎜Operasi data dilakukan pada bahagian penyemak imbas, dan semua perubahan dibuat berdasarkan data yang ditolak oleh pelayan
/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 melalui GET /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? 🎜淡淡烟草味2017-05-16 17:08:28
Dan pelayan tidak selalu mengetahui data yang diperlukan oleh penyemak imbas
Komunikasi antara pelayan dan pelayar perlu berdasarkan spesifikasi Komunikasi antara backend dan fontend sangat penting dalam pembangunan aplikasi
Pelayar mempunyai sandaran data, yang memerlukan penyelenggaraan manual, sentiasa dikemas kini dengan pelayan, dsb.
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
Operasi data dilakukan pada bahagian penyemak imbas, dan semua perubahan dibuat berdasarkan data yang ditolak oleh pelayan
Dengan kata lain, akan ada data lengkap yang diperlukan pengguna pada pelayan, dan penyemak imbas hanya akan menyegerakkan secara pasif
Aplikasi semuanya seperti ini, dan data akhirnya mendarat di pelayan.
Pelayan menyimpan semua status semasa setiap pengguna, seperti jadual mana pelayar pergi, dsb.
Dengan cara ini pelayan boleh mengira semua data yang diperlukan untuk pengguna semasa
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.
Tindakan berkaitan data pelanggan semuanya dihantar ke pelayan melalui WebSocket dan diproses oleh pelayan,
Pelayan mengemas kini sandaran data tempatan melalui jsonpatch dan WebSocket
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.