2016-07-26 5 views
2

現在、Djangoフレームワークを使用している最初のウェブサイトで作業しています。私のコンテンツの主要部分はサードパーティAPIから取得されます。このAPIは、必要なすべてのデータを取得するために前記APIへの3つのAPI要求を必要とします。 私の問題は、パフォーマンスが大幅に低下するということです。これは、ページの読み込み時間が約1〜2秒であることを意味しています。DjangoのWebサイトコンテンツはサードパーティのREST APIから構築されています

私はこれらのシナリオのためのいくつかの選択肢/ベストプラクティスを探しています。ページの読み込み時間を短縮するにはどうすればよいですか?これまでは、現在ログインしているすべてのユーザーのAPIを呼び出してローカルデータベースにデータを保存するバックグラウンドでcronjobを実行することを検討していましたが、応答時間がはるかに短くなっています。

もう1つの方法は、APIリクエストデータを別々に読み込み、読み込まれたデータを追加する方法ですが、どのように動作するかはわかりません。

他のアイデアやこれを改善する方法についてのヒントを教えてください。

ありがとうございました!

トビアス

答えて

0

それはあなたが最初にローカル・データベース内のデータを見て存在しない場合は、APIを呼び出し、データを保存し、キャッシュを構築します一般的な方法。 詳しい情報がなければ、実際の例を書くことは不可能です。 一度にすべてを行うカスタムメソッドを作成することができます。

def call_data(id): 
    try: 
     data = DataModel.objects.get(api_id=id) 
    except Exception, e: 
     data = requests.get("http://api-call/") 
     DataModel.objects.create(**data) 

    return data 

これは本番では使用しない例ですが、少なくともいくつかの検証の検証が必要です。

+1

ありがとうございます!しかし、あなたがすでに言ったように、より多くの情報があれば、より具体的な助言をするのは難しいので、ここではさらに詳しく: 私がRESTサービスから引き出しているデータは、異なって変化しています。 API呼び出し1)この値は1日に1回変更されることがありますが、ユーザーの操作に基づいて変更されることがあります。これを1時間に1回ポーリングすると、 API呼び出しで十分です。2)この値は2分ごとに変更される可能性があります。 API呼び出し3)この値は10分前またはそれ以前に必ず変更されます。 私が言いたいのは、データを頻繁に削除しない限り、キャッシュはおそらくオプションではないということです。遅い経験。 –

+0

@TobiasZキャッシュオプションがないと、APIのデータを取得してユーザーエクスペリエンスを向上させるために非同期呼び出しを使用することをお勧めします。しかし、そのためにはPython/django以上のJSが必要になります。詳細が必要な場合は質問を更新する方が良い – educolo

関連する問題