web-dev-qa-db-ja.com

読み込み時の非常に長い待機時間REST angularjsからのリソース

angularで、flask/python RESTful APIにアクセスしているフロントエンドを構築しています。AngularJS v1.2.16を使用しています。

何らかの理由で、RESTリソースがロードされるまでに非常に長い時間がかかり、ほとんどの時間は待機しているだけです。「待機中」は最初のバイトまでの時間を測定していると私は理解しています-私のすべてのサービスはローカルで実行されます(フロントエンド、API、データベース)。

Angular, the API and the Mongo DB are all running locally.

サービスがすべてローカルで実行されていることを考えると、これをデバッグする方法がわかりません。どこを見ればいいのか、誰かアドバイスはありますか?すべてのメソッドをチェックしたところ、かなり高速に実行されました(REST呼び出しごとに100ミリ秒未満)。 postman を使用すると、APIはほぼ瞬時に戻ります。

待機を修正する方法についてのアイデアは、Angularを介してRESTfulリソースをロードする場合にのみ当てはまるようです。 angular $ http getリクエストはかなり簡単です:

myAppControllers.controller('ManageCtrl', ['$scope', '$http',
    function($scope, $http) {
        $http({
            url: 'http://127.0.0.1:5000/v1/domains/',
            method: "GET",
            headers: { 'Content-Type': 'application/json' },
        }).
        success(function(data, status, headers, config) {
            console.log('login successful');
            console.log(status);
            console.log(data);
        }).
        error(function(data, status, headers, config) {
            console.log('login failed');
        });
    }]);

編集:

  • この問題は、GoogleChromeの通常モードでのみ発生します。
  • シークレットモードを使用すると、GETリクエストは高速になります。
18
Samir Said

同じ問題が発生しました。いくつかの調査の結果、問題はChromeが接続を使用する方法と、モノスレッドとしてのflask)のデフォルト構成に関連しています。

flaskアプリの起動時にthreaded = trueを追加して、問題を解決しました:

app.run(threaded=True)
23
dd.

同じ問題が発生しました(AngularフロントエンドがChromeおよびFlaskバックエンドで実行されています)。両方を試した後Angular 1.2.xと1.3.x、およびその他の10億の順列で、私が見つけた唯一の「解決策」は、Tornado WebサーバーでFlaskバックエンドを実行することです( http: //www.tornadoweb.org/en/stable/ )。他のWSGIコンテナも機能する可能性がありますが、これは私がテストしたものです。

Flaskアプリケーションで、以下を貼り付けます。

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop

if __name__ == '__main__':
  http_server = HTTPServer(WSGIContainer(app))
  http_server.listen(5000)
  IOLoop.instance().start()

次のように入力して、Webサーバーを起動できます。

python myserver.py
13
jhorey

this も結びたかった。だが

app.run(threaded=True) 

私のために働いた!

0
Eric

私は今、非常によく似た問題に直面しています。私の現在の解決策(現時点で私のシェフに受け入れられます:))は、残念ながらすべての問題を取り除くことはできませんが、header:{ 'Content-Type': 'application/json' }{ 'Content-Type': 'text/plain' }に設定することです。現在、最初のGETリクエストだけが非常に遅く、次のリクエストは500ミリ秒未満かかります。フロントエンドでRestangularを使用し、バックエンドでwsgiref.simple_serverを使用しています。

0