Après avoir utilisé React, le processus de rendu de View à partir de données est relativement simple,
Mais des applications plus pratiques nécessitent le support du serveur, le multi-utilisateur, la synchronisation en temps réel, etc.,
J'ai rencontré quelques problèmes dans la pratique existante (je ne connais pas très bien l'architecture back-end, donc je la regarde du point de vue front-end) :
Lors de la mise en cache des données côté navigateur, parfois les données externes ne peuvent être capturées qu'à partir du serveur,
Le serveur ne sait pas toujours de quelles données le navigateur a besoin
Le navigateur dispose d'une sauvegarde des données, qui doit être maintenue manuellement, mise à jour avec le serveur, etc.
Des opérations similaires seront également effectuées lorsque le serveur transmettra des données, il y aura donc du code en double des deux côtés
Je réfléchis donc à une solution pour rendre l'ensemble du processus plus clair et plus simple (pour les petites applications, la performance n'est pas prise en compte en premier) :
Les opérations sur les données sont effectuées côté navigateur et toutes les modifications sont apportées en fonction des données transmises par le serveur
En d'autres termes, il y aura toutes les données requises par l'utilisateur sur le serveur, et le navigateur ne se synchronisera que passivement
Le serveur enregistre tout l'état actuel de chaque utilisateur, comme la table à laquelle le navigateur accède, etc.
De cette façon, le serveur peut calculer toutes les données nécessaires à l'utilisateur actuel
Les actions liées aux données du client sont toutes envoyées au serveur via WebSocket et traitées par le serveur,
Le serveur met à jour la sauvegarde des données locales via jsonpatch et WebSocket
Je réfléchis à cette idée depuis longtemps, mais je n'ai pas encore commencé à y réfléchir. Des camarades de classe ont-ils pensé à un tel plan ?
Notez également que le scénario que j'envisage est une petite application où des dizaines de personnes sont en ligne en même temps...
Cela ne devrait pas être considéré comme la réponse, discutons-en simplement ensemble. Je ne pense pas comprendre certaines des choses que vous avez décrites, je vais donc d'abord vous demander de m'assurer que nous sommes sur la même longueur d'onde :
Attendez une minute, lors de la récupération des données du serveur, n'êtes-vous pas obligé de déclarer le type de requête ? Pourquoi le serveur a-t-il besoin de « savoir » de quelles données le navigateur a besoin ? Je veux dire, en supposant qu'il manque (disons) des "informations sur l'auteur" à vos données mises en cache, alors elles devraient être
GET /author/:id
, n'est-ce pas ? Comment cela signifie-t-il que le serveur « ne sait pas toujours » de quelles données le navigateur a besoin ? Pouvez-vous donner un exemple pour clarifier ce que vous voulez dire ?GET /author/:id
对吗?这样怎么会变成服务器“并不总是知道”浏览器需要什么数据?能否举一个例子说清楚你的意思?我觉得“推送”就意味着:浏览器其实不知道数据有更新,服务器知道,所以服务器推给浏览器更新后的数据。而你在浏览器手动维护的数据则意味着:你知道数据变化了,所以才要手动维护,并且要提交给服务器以同步数据。
你不觉得这两者恰好是一条线的两端,其实不矛盾吗?为什么会有重复代码?你指的是用于同步数据的代码?
所以你所思考的方案:
那……这和我直接
GET /author/5
Le navigateur dispose d'une sauvegarde des données, qui nécessite une maintenance manuelle, une mise à jour avec le serveur, etc. Des opérations similaires seront également effectuées lorsque le serveur envoie des données, il y aura donc du code en double des deux côtés
Cela signifie-t-il que le client ne met pas les données en cache ? Tant qu'il y a une opération de modification de données, les données complètes seront immédiatement obtenues du serveur (ou en d'autres termes, si un utilisateur effectue une opération, la mise à jour des données sera immédiatement transmise à tous les autres clients) ? 🎜 🎜 🎜 🎜...Quelles données de quelle table
Si je comprends bien, ce que vous voulez dire, c'est qu'en supposant que je suis l'utilisateur A et que je regarde les informations de
/author/5
, il devrait y avoir un mécanisme de curseur sur le serveur qui indique : "Utilisateur A parcourt la table des auteurs. Données avec l'identifiant 5", n'est-ce pas ? En d'autres termes, chaque fois que l'URL change, elle doit envoyer « ma position actuelle » au serveur, puis le serveur me transmettra les données correspondantes. Est-ce ce que vous voulez dire ? 🎜 🎜 🎜Alors... quelle est la différence entre cela et le fait que j'obtienne les données directement viaGET /author/5
? 🎜 🎜 🎜Je vois que vous avez vos propres réflexions sur ce que vous avez décrit, mais je pense que la scène est encore trop vague. J'aimerais entendre des choses plus précises. Quels problèmes ont été résolus en utilisant des scénarios spécifiques comme exemples ? 🎜La communication entre le serveur et le navigateur doit être basée sur des spécifications. La communication entre le backend et le fontend est très importante dans le développement d'applications
.En effet, les données métiers doivent in fine être sauvegardées sur le serveur, et les bases de données (mysql, etc.) fournissent de tels services. Les données interagissent entre le serveur et le client. Pour faire simple, les données du navigateur peuvent être appelées cache. La plage de cache est très large, last_modified et etag font également partie des caches, ainsi que le cache à l'intérieur de l'application serveur
Quant au code répété, il est probablement dû à la division peu claire du travail entre le backend et le fontend, ainsi qu'à l'architecture technique. Cependant, les projets permettent parfois de dupliquer du code afin de démarrer rapidement. Il pourra être reconstruit lentement plus tard. Au début, vous ne pouvez choisir qu'en fonction du niveau technique actuel, et vous ne devez pas approfondir la technologie, ce qui empêcherait le projet d'être achevé dans les délais
Les applications sont toutes comme ça, et les données sont finalement débarquées sur le serveur.
D'une manière générale, les serveurs sont conçus pour être sans état. Cela sera nécessaire pour l'expansion du serveur lorsque le projet se développera à l'avenir. Lorsque le navigateur a besoin de données, il se rend au serveur pour obtenir les données. Le serveur fournit des données en fonction des paramètres et des protocoles d'interface envoyés par le navigateur, et le navigateur peut facilement savoir dans quelle table et dans quelle position se trouve l'utilisateur actuel. Par exemple, le site Sina Weibo prend l'initiative d'extraire les données du serveur lorsqu'il atteint la fin de la page. Après avoir atteint un certain montant, il faut le lien de la page suivante pour obtenir la page de données suivante.
La mise en œuvre de cette technologie est principalement liée au scénario d'application. Websocket convient aux connexions longues pour obtenir des données. Si vous mettez simplement à jour les données, il suffit d'utiliser le protocole http ordinaire.