【问题标题】:Angularjs get request for a huge json fileAngularjs获取一个巨大的json文件的请求
【发布时间】:2014-06-04 13:53:37
【问题描述】:

我需要向用户显示数据库中的一些数据。数据在一个 json 文件中,并且具有相当大的大小。 json 文件的大小约为 15MB。我创建了一个服务并使用 promise api 发出成功的请求并加载数据并通过在 div 上执行 ng-repeat 将其显示给用户。现在,正如您所了解的,该页面仅在文件可用时才会显示数据,并且发出获取 15MB 文件的获取请求需要花费大量时间。在某些情况下,我看到 Firefox 简单地在一段时间后停止加载文件。现在我的问题是 Angular 执行此类任务的方式是什么。

我正在考虑做一些事情,比如首先显示 json 文件中的几个条目,然后在滚动页面的其余部分时将填充剩余的数据,但我想这是不可能的,因为当 get 请求它时做了,它会先完全下载文件,然后显示数据?

Angular 提供了一种叫做 ng-cloak 的东西,但这只是为了避免闪烁。我可以使用 ng-cloak 之类的东西吗? 任何其他想法或如何处理此类情况或实现此目的的角度方式是什么??

【问题讨论】:

  • 有什么理由不能使用分页??
  • 分页,加载数据后出现。
  • 应该在加载数据之前,我的意思是服务器端分页...您只从服务器获取分页数据,如果需要从服务器获取更多数据..不要加载太多数据在开始..这将有助于保持页面响应..
  • 后端没有问题。我只有前端和 20mb json 文件
  • 你不只是有一个前端,angularjs 是从某个地方提供的,而一个文件是从某个地方提供的。某处是(基于您的 cmets)一个 Web 服务器。

标签: javascript jquery json angularjs


【解决方案1】:

根据您处理大量 JSON 有效负载的要求。 FWIW 你有两个选择:

  • 您的服务器支持 HTTP/JSON 流媒体

    创建一个角度 onreadystatechange 处理程序并使用像 oboe.js 这样的流式 JSON 解析器

  • 您的服务器不支持 HTTP/JSON 流媒体

    按照其他人的建议执行并提供对该有效负载的分页访问,以便浏览器可以按需分块加载它。

【讨论】:

  • 我也在加载 json 作为本地文件,它不是来自跨域服务器
  • 你是如何运行你的 Angular 应用程序的?你是从像localhost:9000 这样的(本地)网络服务器运行它,还是只是使用文件 URI 方案打开一个 html 文件:file://c:/my_html_file.html?
  • 我在本地主机上运行它。我的意思是 json 位于我的 js 文件所在的同一目录中。我不是从另一个域中提取 json。我在本地运行它,所有文件都在我的控制之下..
  • 这意味着您在 Web 服务器上运行它,该服务器仍然受制于我提供的两个选项之一——它要么支持 http 流,要么不支持。无论您是在开发机器上本地运行为您的 Angular 应用程序提供服务的服务器,还是在远程 VPS 上运行它都无关紧要。
【解决方案2】:

让您的后端分块交付文件,以便您的 Angular 前端可以一次检索其中的一部分。

类似:

/backend/getentries?skip=500&count=100

让您的前端在计数时重复调用后端跳过并将您得到的结果附加到您在前端已有的任何内容中。

【讨论】:

  • 后端在这里没有问题。我有一个 json 文件的本地数据库
  • 是的,后端绝对是这个问题的关键。请参阅上面的弗拉基米尔评论
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2021-05-29
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多