1

パフォーマンスの問題が発生し、困惑しています。MySQLでDjangoを使用しています。私は次のことをします:

1。Ajaxを使用してWebページからデータを送信します。

2。Views.pyで投稿データを受け取り、MySQLにデータを挿入して、多くの関数呼び出しを介して処理します。私が最初に行うことは、Python変数timeStartを設定することです。応答を返す前に私が行う最後のことは、データを処理する時間を計算することです。

processTime = time.clock() - timeStart 

応答がprocessTimeであるrender-to-responseを使用して応答を送信します。

3。processTimeはWebページに表示されます。

processTimeは1.5秒になりますが、Ajaxを介してデータを送信してから応答を受信するまでの合計時間は13秒です。単純なページをレンダリングし、データを送受信するのに11.5秒かかります。これは長い時間です。しかし、それからそれはより奇妙になります。私はviews.py関数を短くして、ほとんどすぐに応答を返しました。これにより、処理時間が1.5秒からほぼ0に短縮されます。ただし、合計時間が13秒から約2秒に短縮されます。これは、実際、データ処理が遅いことを示しているように思われます。ただし、それは計算されたprocessTimeが1.5秒になったことを説明するものではありません。私は実際に最初の行でstartTimeを設定し、最後の行でprocessTimeを計算します。StartTimeは上書きされません。

これは、ある種のクリーンアッププロセス、または関数呼び出しに依存する応答の終了と送信に関連する何かがあるかのようです。しかし、何ですか?または、時間の計算で愚かなことをしていますか?debug=Falseを設定しました。

編集-追加情報:

テンプレートには、「hello」という単語と{{result}}のみが含まれています。クエリセットを返すのではなく、processTime:{'result':processTime}だけを返します。

MySQLの保存された関数を使用している場合、時差が生じる可能性があります。結果を返しているようですが、それでも何かをしていますか????

4

3 に答える 3

0

テンプレートレンダリングフェーズでクエリされているORM/DBモデルクエリセットがあります。これはあなたの見解では数えられていません。ディスクヒットにより、約10秒かかります。

それか、HTTP応答を返す前にさらにDBアクションを実行するORM関連のミドルウェアを介したビューによってトリガーされています。

電源を入れて、DBログを確認します。

于 2012-07-16T14:47:42.617 に答える
0

応答を返す方法の適切な詳細を提供していませんが、次のようなことをしていると思います。

data = MyModel.objects.all()
processTime = time.clock() - timeStart 
return render_to_response('my_template.html, {'processTime': processTime,
                                              'data': myqueryset})

したがって、processTimeの計算は、応答の作成で最後に行われることとはかけ離れています。これは、テンプレートのレンダリング全体が後で行われるためです。あなたが割り引いた2つの要素があります:テンプレート自体をレンダリングするコストは決して安くはありません(Djangoのテンプレート言語は特に効率的ではありません)。また、データベース呼び出しのコスト:例として、MyModel.objects.all()以下で示したルックアップは、テンプレートで繰り返されるまで実際にはデータベースにヒットしないため、processTimeの計算後に行われます。

いずれにせよ、Djangoデバッグツールバーを調査する必要があります。これにより、レンダリング時間の内訳が大幅に改善されます。

于 2012-07-16T14:58:39.167 に答える
0

問題は、processTimeの測定方法にありました。time.clock()ではなくtime.time()を使用する必要がありました。time.clock()は、私が1.5秒しか費やしていないことを教えてくれましたが、それは明らかにCPU時間であり、実際の時間ではありません。view.pyで実際に費やされた時間は、13秒程度でした。これは、トランザクション全体で測定した時間に相当します。

于 2012-07-20T16:13:10.620 に答える