如何计算从用户输入搜索条件到相关信息加载/显示在门户上的响应时间?
自Django 1.10版本开始,现在工作方式有所不同。
https://docs.djangoproject.com/en/3.0/topics/http/middleware/
新样式如下:
import time
class StatsMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start_time = time.time()
response = self.get_response(request)
duration = time.time() - start_time
# Add the header. Or do other things, my use case is to send a monitoring metric
response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
return response
不需要在请求对象上存储开始时间并检索,因为所有操作都发生在同一个方法中。
也可以使用简单的函数形式来完成,而不是类:
import time
def stats_middleware(get_response):
def middleware(request):
start_time = time.time()
response = get_response(request)
duration = time.time() - start_time
response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
return response
return middleware
Django是用于后端操作的Python框架。它的目的是处理HTTP请求,因此您的问题“从用户输入搜索条件到相关信息加载/显示的时刻”在这个上下文中非常模糊。您的问题表明您正在查看基于交互式JavaScript / Ajax 的前端?
如果您对单个HTTP请求的渲染时间感到好奇,可以使用自定义中间件来解决,类似于以下内容:
class StatsMiddleware(object):
def process_request(self, request):
"Start time at request coming in"
request.start_time = time.time()
def process_response(self, request, response):
"End of request, take time"
total = time.time() - request.start_time
# Add the header.
response["X-total-time"] = int(total * 1000)
return response
然后,在相应的 Django settings.py
部分中添加此中间件:
MIDDLEWARE_CLASSES = (
...
'app.stats.StatsMiddleware',
...
)
生成响应所花费的时间将会被添加到一个名为“X-total-time”的自定义HTTP头中。请注意,这将包括所有渲染、计算、第三方系统和数据库操作。
settings.py
中的MIDDLEWARE_CLASSES时,结果应在响应的“X-total-time”标头中显示每个请求。如果您希望在页面上显示结果,则应利用模板系统。但是,这种方法可能会在测量中省略渲染时间。要查看响应标头,Web控制台(例如Firefox)就足够了。 - Andreas Neumeierimport time
class StatsMiddleware(object):
def process_request(self, request):
"Store the start time when the request comes in."
request.start_time = time.time()
def process_response(self, request, response):
"Calculate and output the page generation duration"
# Get the start time from the request and calculate how long
# the response took.
duration = time.time() - request.start_time
# Add the header.
response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
return response
其实就是这样,只需在请求到来时存储时间,稍后再检索即可。
要安装上述中间件,只需将其添加到您的settings.py文件中:
MIDDLEWARE_CLASSES = (
'project.stats_middleware.StatsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
...
)
你可以在互联网浏览器中查看它(F12),或者如果你使用POSTMAN,它会显示时间。
此外,你还可以使用标准的Python库time
来测量代码执行时间。