0

Firebase の PHP API を使用して、ユーザーがアプリケーションを介して何かを行うときに、レポート/ダッシュボード AngularJS アプリを更新しています。問題は、速度が速すぎると、Angular アプリが Firebase から新しいデータをすぐに受信しないことがあります。その後、突然、一度に 1 つずつ取得するのではなく、大量の新しいオブジェクトを一度に受信します。

Firebase は API へのリクエスト数を調整していますか? これはアーキテクチャ設計上の欠陥ですか?

Laravel フレームワークhttp://laravel.com/

ご覧のとおり、ここでは特別なことは何も起きていません。

$fb = new firebase(Config::get('firebase.url'), Config::get('firebase.token'));
$fb->push("/" . Config::get('firebase.reports_feed') . "/" . Auth::user()->account_user_id, array(
    'createdAt' => Date::timezone(Date::sql(), "UTC", Auth::user()->account()->timezone),
    'message' => Auth::user()->name . " activated a '{$record->card->name}' system.",
    'user' => array(
        'id' => Auth::user()->id,
        'name' => Auth::user()->name,
    ),
    'reload' => false,
    'processed' => false,
    'record' => to_json($record),
));

カード オブジェクトは浅いです。

ここに画像の説明を入力

アップデート

これをテストしている2台のコンピューターがあります。

  • 安価なタッチスクリーン エイサー - Windows7
  • 古いコンパック - ElementaryOS

Compaq は acer よりも先に更新する傾向があることに気付きました。おそらくこれは、javascript 変数が大きすぎる RAM の問題でしょうか? 現在、アクティビティ フィードに 225 個のオブジェクトの配列があります。

更新 2

  1. アプリでアクションを実行しました
  2. firebaseに投稿しました
  3. フォージはレコードを追加すると緑色になりました
  4. リスナーには何も起こりませんでした。
  5. このアクションをさらに 1 ~ 3 回実行すると、アプリが突然更新されました。

controllers.controller('ReportsCtrl', function($scope, angularFire) { var ref = new Firebase($scope.main.firebaseUrl + "/" + $scope.main.accountUserId); $scope.feedItems = []; angularFire (ref, $scope, "feedItems");

$scope.$watch('feedItems', function(newVal, oldVal) {
    _.each($scope.feedItems, function(item) {
        if (!item.processed) {
            toastr.info(item.message); // alert message that pops up
            item.processed = true;

            if (item.reload)
                $scope.loadGoalStats();
        }
    });

    $scope.feedItemsLength = _.toArray($scope.feedItems).length;
}, true);

});

4

1 に答える 1

0

アプリケーションを本番環境に投入したばかりですが、ボトルネックは PHP が意図しないことを行っていることにあることは確かです。コードを再編成し、可能な限り angularjs のすべてを firebase に保持することで、これを解決しました。

私の場合、多くのcurlリクエストに繰り返し対応していました。したがって、それをサーバー側ではなくクライアント側にオフセットすると、はるかにうまく機能しました。(明らかな理由で)

于 2013-09-19T01:01:47.277 に答える