我有一个API,它通过join返回整个数据库的对象列表。 (是的,一切都是必需的,这是一个很酷的报道:))
当我没有其中一张表时,数据为150MB,一切正常。 我现在有一个问题,我添加了一个大表(50MB),它崩溃了浏览器。
有没有办法在不崩溃浏览器的情况下获得200MB的响应?
答案 0 :(得分:4)
假设您确实需要浏览器中的所有这些数据,并且您愿意接受使用大型数据集的性能影响......
这里的问题可能不在于数据本身的原始大小,而在于您拥有的格式。
如果您将200MB转储到JSON并期望您的浏览器解析它并在内存中使用所有数据创建单个对象,那么您将度过一段美好时光。 XML也是如此。此外,我怀疑在下载200MB时,您希望在加载数据时向用户显示一些进展...甚至可能会在加载数据时显示一些数据。所有这一切的解决方案是将数据分块。我猜你的数据主要是基于数组的。按块加载该数组块的元素。一次从10k记录开始,看看它在哪里。
您仍然可以使用AJAX来获取数据,因为您将解决解析响应的问题。但是,您也可以考虑使用Web套接字来减少一些请求开销。 (或者,尽可能使用HTTP / 2。)
我还应该指出,有可用于JSON和XML的流解析器。这要求您能够获得该数据流(Web套接字使这一点变得简单),并且取决于您的数据格式是否对您有用。
如果在您的数据分块后仍然崩溃,那么是时候熟悉开发人员工具并分析您的内存使用情况。您可以在网页中加载的内容有限,因浏览器而异(以及系统与系统之间的差异,特别是在移动设备上)。
答案 1 :(得分:0)
我不知道这是否有帮助,但您可以将数据拆分为块并在当前完成后进行多次调用(可能会传递块顺序的索引)。这样,如果必须获得所有200 MB数据
,就可以防止将来出现意外情况通常我只会在需要时(通常是用户操作)获得最重要的数据而不是其他部分