gpt4 book ai didi

javascript - AngularJS $resource 返回缓慢

转载 作者:行者123 更新时间:2023-11-30 17:39:10 24 4
gpt4 key购买 nike

我有一个非常简单的资源调用 CakePHP。当我使用 Advanced Rest Client 运行请求时,它会在 ~100 毫秒内返回。在 Angular 上需要 2-4 秒。下面是我运行的代码,用于“证明”资源是瓶颈。

资源:

var resource = $resource('/index.php/props/:op/:id.json', {}, {
getPropertyListByCategory: { method:'GET', params:{ op:'getPropertyListByCategory', category:'@category' } },
setPropertyListByCategory: { method:'POST', params:{ op:'setPropertyListByCategory' } }
});

方法:

function getPropertyListByCategory(params) {
var x1 = Date.now();
var deferred = $q.defer();
resource.getPropertyListByCategory(params, function(resp) {
var x2 = Date.now();
console.log(x2-x1);
deferred.resolve(resp.data);
});
return deferred.promise;
}

您可以在资源调用之前看到我的时间戳,然后将其与解析进行比较。同样,当我直接针对 Cake 运行此请求时,它返回速度非常快。蛋糕不是问题。

有什么办法可以加快速度吗?

最佳答案

$resource 并不慢

我想把它放在评论里,但它太长了,所以..

您可能很想认为 $resource 是这里的瓶颈,但我认为这是因为您不完全了解异步代码的工作原理,更重要的是 angular 的工作原理。

您的“基准测试” 无效,它假定立即调用回调,并且其间没有其他代码运行。

看到这个问题:AngularJS: Why does $http not actually make a http request until you leave the current digest?

$resource 使用 $http 直到执行下一个 $digest() 才会实际发送请求。

很多事情都会使 $digest 变慢,您应该检查应用程序的其他部分。

您也可以创建一个只有 $resource 的 Angular Testing 应用程序,看看它是否仍然很慢。

如果您仔细想想,您最后一次听说不涉及 $digest 的 angular.js 性能问题是什么时候?!

同样,$resource 有什么可能会变慢?!这只是一项简单的服务。


function getPropertyListByCategory(params) {
var x1 = Date.now();
var deferred = $q.defer();

// the request is queued and will run after a $digest!!
resource.getPropertyListByCategory(params, function(resp) {

var x2 = Date.now();
deferred.resolve(resp.data);
});

// x3 is assigned before x2 ..

var x3 = Date.now();

return deferred.promise;
}

关于javascript - AngularJS $resource 返回缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21410434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com