PHP:请求 50MB-100MB json - 浏览器崩溃/不显示任何结果

Posted

技术标签:

【中文标题】PHP:请求 50MB-100MB json - 浏览器崩溃/不显示任何结果【英文标题】:PHP: Request 50MB-100MB json - browser crash / do not display any result 【发布时间】:2019-07-29 02:21:43 【问题描述】:

巨大的 json 服务器请求:例如大约 50MB - 100MB。

据我所知,在将大量数据请求加载到表(我通常使用数据表)时可能会崩溃,结果:内存达到近 8G,浏览器崩溃。 Chrome 可能不会返回结果,Firefox 通常会询问我是要等待还是终止该进程。

我将开始开发一个项目,该项目将发送对大量 json 的请求,全部压缩(由服务器端 php 完成)。我的报告的目的是获取数据,并在表格中显示所有内容 - 易于过滤和排序。因此,对于这种特定情况,我找不到“延迟加载”的用法。

这次我可能会使用 vue-js 数据表库(不确定具体是哪个)。

到底是什么占用了我这么多内存?我确定收到了 json 结果。将 json 渲染/解析到 DOM 吗? (我现在指的是数据表示例:https://datatables.net/examples/data_sources/ajax)

在这种情况下,最佳做法是什么? 我开始研究这个问题,并注意到 2010 年的一些帖子似乎根本不相关。

【问题讨论】:

'到底是什么占用了我这么多的内存?' - 我们不能在没有看到一些代码的情况下肯定地说,但是,请注意潜在的内存泄漏(递归函数,查询等)。 '在这种情况下最好的做法是什么?' - 你可以尝试分解文件吗? 如前所述从 json 文件插入数据表。例如:datatables.net/examples/data_sources/ajax 【参考方案1】:

HTTP 响应的大小没有限制。其他方面有限制,比如:

本地存储 会话存储 缓存 cookies 查询字符串长度 内存(根据您的 CPU 限制或浏览器分配)

相反,问题很可能出在您的数据表实现上。您不能只在 DOM 中插入 100,000 个节点而不期望某种类型的性能影响。此外,如果数据表在这些数据进入时对每个数据执行逻辑并在插入节点之前对其进行处理,那么这也将是一个很大的问题。

您在这里所做的基本上是将执行分页的工作从服务器传递到客户端,并产生了可怕的影响。

如果您必须返回这么大的响应,请考虑使用浏览器提供的存储选项之一(上面提到了一些)。然后从存储的 JSON 响应中分页。

【讨论】:

在本地存储/会话/缓存/cookies中存储json变量?这甚至可能吗?您能否添加更多详细信息?我什至不知道这是可能的。 @RickSanchez 当然。 localStorage.setItem('key', 'value'),然后localStorage.getItem('key') 将产生value 我已经开始研究这个主题,我首先阅读了关于缓存对象变量的内容(使用localStorage)。我认为我无法缓存超过 2MB 的对象(我使用 50MB-100MB)。我没有获得以某种永久方式或使用 cookie 将数据保存到本地计算机的权限,因此不能选择 cookie。保存到内存是我试图避免的问题(浏览器崩溃)。最推荐检查我们的哪个?会话存储? @RickSanchez 坦率地说,如果您的主要目标是将所有这些行插入一个表中并在客户端使用分页,那么我的建议是ag-grid。它是迄今为止我遇到的性能最高的表,我已经在表中插入了绝对度量的大量行,而没有经历太多的降级。 Tnx 我想我遇到了这个库,但主管决定使用vuejs-datatable,原因不明......无论如何,主要原因是,我正在加载大量数据登录。我有一些使用这些数据的报告。因此,与其在不同的报告中多次加载相同的数据(而且这是大量数据),我更喜欢将它们全部加载到不同的变量中,然后只在表格和图表中组织我需要的内容

以上是关于PHP:请求 50MB-100MB json - 浏览器崩溃/不显示任何结果的主要内容,如果未能解决你的问题,请参考以下文章

火星时代系列所有视频教程集合

碎片较多的表重组

表空间查询

推荐一个100人左右局域网用的上网行为管理

oracle常用查询语句

数据库如何查看表空间的使用率