【问题标题】:Anugular nested $http calls takes long time to executeAngular 嵌套的 $http 调用需要很长时间才能执行
【发布时间】:2018-01-15 17:19:44
【问题描述】:

在我的 Angular 应用程序中。我有大约 6 到 7 个 http 链接请求,执行所有请求需要很长时间。如何优化?

empSvc.getallEmp().then(function (data) {
    if (data !== null && data.length > 0) {
        repos.saveEmp(data).then(function () {
            repos.getemp().then(function (result) {
                ctrl.emp= result;
                getsubordinates().then(function () {
                    deleteinactive(data).then(function () {
                        deleteinactiveSubordinate(ctrl.emp).then(function () {
                           console.log(success);

                        });
                    });
                });
            });
        });

【问题讨论】:

  • 请向我们展示您的代码,如果没有固有问题,请尝试代码审查 stackoverflow...
  • 请提供minimal reproducible example。也许其中一些可以归为$q.all()
  • @charlietfl- 谢谢,$q.all() 帮助我减少了几秒。

标签: javascript angularjs


【解决方案1】:

它与角度本身无关。如果您的 http 调用很慢,那么它们很慢,因为您的网络连接速度、有效负载大小和后端服务器处理能力。

如果编写后端 api 函数和路由由您决定,那么您可以编写一个自定义 api 路由,将所有这 6-7 个请求合二为一,并一次性分发所有必要的数据。

例如,如果你有这样的东西。 1) 下载产品类别 2) 下载分类产品 3) 下载产品详情 4) 下载产品cmets 5) 下载产品评级。

您可以编写一条快捷路线,在一个结果集中返回所有这些信息。

e.g /products/{category}/all

and returns data:
{
  category: "Shoes",
  id: 2,
  related_categories: [1,3]
  products: [{
    id: 100,
    brand: "some random brand",
    color: "red",
    comments: ["awesome shoes"]
    ratings: [1,2,3]
  }]
}

将请求合并为一个可以显着提高速度并减少开销。

如果您的查询不依赖于先前查询的数据,那么您可以尝试同时并行执行它们。如果没有更多信息,真的无法提供帮助。

根据您帖子的更新进行快速更新。 在不详细了解这些函数的作用的情况下,我只是在这里猜测一下:

看起来 Angular 应用正试图在某处删除非活动用户。 这真的是您首先需要在前端做的事情吗?

我确定后端服务器可以使用 cron 作业自动删除非活动用户。

您正在将“数据”下载到您的前端 - 只是为了将其原封不动地发送回服务器? 至少看起来是这样。

详细说明这些函数的作用。他们提交请求的地方

【讨论】:

  • 我的要求是差异,我无法合并所有请求数据。每个请求都依赖于另一个请求。
  • 无论如何 - 无论您的问题是什么,它都不是角度问题,也不是您的前端问题。您可以轻松地在一秒钟内发出 6 个 http 请求。速度变慢很可能是由于您的网络种子或服务器处理能力不足。
猜你喜欢
  • 2012-12-03
  • 2011-03-14
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
相关资源
最近更新 更多