PythonのFlaskライブラリを使用して、ページの読み込みごとの実行時間を計算する良い方法は何ですか?
私はviews/__ init__。pyに開始タイマーを置くことを考えていました:
@app.before_request
def before_request():
g.start = time.time()
しかし、差を計算するためにタイマーの最後の部分をどこに配置し、それをhtmlテンプレートのフッターにどのように組み込むのでしょうか?
ありがとう。
それをteardown_request
機能に入れます:
@app.teardown_request
def teardown_request(exception=None):
diff = time.time() - g.start
...
応答を変更することはできません。teardown_request
応答で計算された文字列を使用する場合は、次を使用しますafter_request
。
@app.after_request
def after_request(response):
diff = time.time() - g.start
if (response.response):
response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))
return response
また、content-lengthヘッダーを更新する必要があります。そうしないと、ブラウザーが混乱します(Chromeは予測できない結果をもたらすようです)。
@app.after_request
def after_request(response):
diff = time.time() - g.start
if app.debug:
print "Exec time: %s" % str(diff)
if (response.response):
response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))
response.headers["content-length"] = len(response.response[0])
return response
Peter Farmerの回答で静的ファイルを提供する「壊れたパイプエラー」とリダイレクトの問題(HTTP 301)があったため、提供されたコードが役立つ場合は調整しました。
@app.after_request
def after_request(response):
diff = int((time.time() - g.start) * 1000) # to get a time in ms
if (response.response and response.content_type.startswith("text/html") and response.status_code==200):
response.response[0] = response.response[0].replace('__EXECUTION_TIME__', str(diff))
return response