1

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;
}

リソース呼び出しの直前に I タイムスタンプを表示し、それを解決と比較できます。このリクエストを Cake に対して直接実行すると、非常に高速に返されます。ケーキは問題ではありません。

これを少しスピードアップする方法はありますか?

4

1 に答える 1

2

$resource は遅くない

コメントに入れたかったのですが、長すぎて入りきらないので..

ここで$resourceがボトルネックであると考えたくなるかもしれませんが、それは、非同期コードがどのように機能するか、さらには angular がどのように機能するかを完全に理解していないためだと思います。

あなたの「ベンチマーク」は有効ではありません。コールバックがすぐに呼び出され、その間に他のコードが実行されないことを前提としています。

次の質問を参照してください: AngularJS: 現在のダイジェストを離れるまで $http が実際に http 要求を作成しないのはなぜですか?

$resourceは、次の $digest() が実行されるまで実際にはリクエストを送信しない$httpを使用します。

多くのことが $digest を遅くする可能性があります。アプリケーションの他の部分をチェックする必要があります。

$resource のみを使用して角度テスト アプリケーションを作成し、それでも遅いかどうかを確認することもできます。

考えてみれば、 $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;
}
于 2014-01-28T16:22:53.813 に答える