2

実稼働の準備としてDjangoRESTフレームワークの使用を開始しましたが、残念ながら、パフォーマンスが非常に遅くなっています。

私は500個の辞書の配列を呼び出しており、それぞれに5つのキーと値のペアがあります。シェルでは、呼び出し時間はまったく目立ちません。Enterキーを押すと、完了します。以前は、RESTフレームワークを使用せずに同じコンテンツを直接提供していた場合、目立った遅延もありませんでした。ただし、RESTフレームワークでは、ページがレンダリングされてからコンテンツが表示されるまでに約1〜2秒かかります。

ブラウズ可能なAPIを介して同じ詳細をヒットすると、同様の遅延が発生するため、これはjavascriptによるものではないと思います。

また、現時点ではキャッシュしていません。

4

1 に答える 1

9

質問で与えられた詳細から、他の誰かがあなたのためにこれをデバッグできるようになる方法はありません。

  • 既存の汎用ビューを再利用していますか、それとも独自のビューを作成していますか?
  • データをシリアル化していますか?そうであれば、シリアライザーの定義はどのようになりますか?
  • JSONにレンダリングするとき、またはBrowsable APIにレンダリングするときに、問題が発生しますか?
  • RESTフレームワークなしでコンテンツを提供することについておっしゃっていますが、ビューは以前はどのように見え、その後はどのように見えますか?

RESTフレームワークのビューは簡単なので、プロファイリングツールを使用するか、単にそれらをオーバーライドしてタイミングを追加します。同様に、レンダラーは簡単です。現在使用しているレンダラーをサブクラス化し、親のメソッド.render()の呼び出しのいずれかの側でいくつかのタイミング呼び出しをオーバーライドして追加します。.render()

問題を特定の領域に絞り込んだと思われる場合は、最小限のテストケースをまとめて、問題として提出してください。

シリアル化自体が問題になる可能性は低いです。同じシリアル化エンジンを使用してDjangoのフィクスチャダンプを複製しましたが、大きな劣化はありませんでした。

モデルの関係全体でルックアップを行う場合は、他のDjangoビューの場合とまったく同じように、クエリセットを作成するときに追加.select_related()または呼び出す必要がある場合があります。.prefetch_related()


編集:この投稿に続いて、このチケットに記載されているように、シリアライザーの速度が大幅に向上したことに注意してください。

于 2012-11-06T09:45:19.067 に答える