我对全栈开发比较陌生,目前正在尝试找出一种有效的方法send
and fetch
我的前端 (React) 和后端 (Express) 之间存在大量数据,同时最大限度地减少内存使用。具体来说,我正在构建一个地图应用程序,它需要我处理大型 JSON 文件(10-100mb)。
我当前的设置适用于较小的 JSON 文件:
Backend:
const data = require('../data/data.json');
router.get('/', function(req, res, next) {
res.json(data);
});
前端:
componentDidMount() {
fetch('/')
.then(res => res.json())
.then(data => this.setState({data: data}));
}
然而,如果data
大于~40mb,如果我在本地测试,由于内存不足,后端会崩溃。另外,保留数据require()
也需要相当多的内存。
我做了一些研究,并对 JSON 解析、字符串化、流式传输有了大致的了解,我认为答案就在于使用分块 json 流来一点一点地发送数据,但我对其实现几乎一无所知,特别是使用单个fetch()
这样做(这可能吗?)。
非常感谢有关如何解决此问题的任何建议。
首先,40mb 是巨大的,对于您的用户来说可能不考虑,尤其是在移动使用的可能性很高的情况下。
如果可能,最好在后端收集这些数据,可能将其放入磁盘上,然后根据需要仅向前端提供必要的数据。由于地图需要更多数据,您将进一步调用后端。
如果这不可能,您可以使用客户端捆绑包加载此数据。如果数据更新不太频繁,您甚至可以将其缓存在前端。这至少可以防止用户需要重复获取它。
或者,您可以通过服务器上的流读取 JSON 并将数据流式传输到客户端并使用类似JSON流 https://www.npmjs.com/package/JSONStream解析客户端上的数据。
以下是如何通过套接字从服务器传输 JSON 的示例:如何通过套接字从服务器传输 JSON https://stackoverflow.com/questions/26586388/building-simple-nodejs-api-with-streaming-json-output
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)