服务端渲染全局所需数据, 客户端用 React 呈现, 这样一套方案可行吗?
用了 React 以后, 从数据渲染 View 流程就相对轻松了,
但是更实用应用需要是有服务端支持, 多用户, 实时同步, 这些等等,
我在已有的实践当中遇到一些问题(我不是很熟悉后端的架构, 所以从前端角度看):
-
浏览器端缓存数据时, 有时会遇到外部的数据只能从服务器抓,
而服务器并不总是知道浏览器端需要什么数据 -
浏览器有一份数据备份, 就需要手动维护, 保持跟服务器更新等等
而类似操作在服务器推送数据时也会做, 这样两边就有重复代码
于是我在思考一个方案, 让整个流程更清晰更简单(小型的应用, 先不考虑性能):
-
浏览器端进行数据的操作, 全部靠服务器推送的数据进行更改
也就是说服务器上会有一个用户需要的完整的数据存在, 浏览器端仅仅被动同步 -
服务器上保存每个用户当前所有的状态, 比如浏览器到哪个表的哪个位置等等
这样服务器就能计算出当前用户所需的全部数据 -
客户端与数据相关的 Action 一律通过 WebSocket 向服务器发送由服务器处理,
服务器通过 jsonpatch 和 WebSocket 对本地的数据备份进行更新
这样一个思路我响了很久, 但没开始深入, 有没有同学思考过这样的方案?
另外注意我考虑的场景是几十人同时在线的小应用...
Answers
我这个应该不算答案,就当是一起探讨一下吧。你描述的一些东西我觉得看不明白,我先来问问清楚好保证我们在同一条线上:
浏览器端缓存数据时, 有时会遇到外部的数据只能从服务器抓, 而服务器并不总是知道浏览器端需要什么数据
等一下,从服务器上抓数据的时候,难道不是要声明请求类型的吗?为什么服务器需要“知道”浏览器需要什么数据?我的意思是,假设你缓存的数据缺少(比方说)“作者信息”,那就应该
GET /author/:id
对吗?这样怎么会变成服务器“并不总是知道”浏览器需要什么数据?能否举一个例子说清楚你的意思?
浏览器有一份数据备份, 就需要手动维护, 保持跟服务器更新等等、而类似操作在服务器推送数据时也会做, 这样两边就有重复代码
我觉得“推送”就意味着:浏览器其实不知道数据有更新,服务器知道,所以服务器推给浏览器更新后的数据。而你在浏览器手动维护的数据则意味着:你知道数据变化了,所以才要手动维护,并且要提交给服务器以同步数据。
你不觉得这两者恰好是一条线的两端,其实不矛盾吗?为什么会有重复代码?你指的是用于同步数据的代码?
所以你所思考的方案:
浏览器端进行数据的操作, 全部靠服务器推送的数据进行更改
意思是客户端不做数据缓存?只要有数据变更操作就从服务器即时获取完整的数据(或者说,一个用户做了操作就立刻把数据更新推给其他所有的客户端)?
……哪个表的哪个数据
若我没理解错,你的意思是假设我是用户 A,我正在看/author/5
的资料,服务器上应该有一个游标机制注明:“用户 A 正在浏览 authors 表 id 为 5 的数据”,是吗?换句话说,每当 URL 改变的时候就应该发送给服务器“我当前的位置”,然后服务器就把相应的数据推送给我,是这个意思?
那……这和我直接
GET /author/5
拿到数据有多大的区别?
你描述的东西,我能看得出来有你自己的想法,但是我觉得场景还是太模糊了。更想听听具体的东西,以具体场景为例到底解决了哪些问题?