Django urlconf de desempenho:vai aninhadas padrão de grupos de ajudar ou prejudicar?
-
12-11-2019 - |
Pergunta
Eu estou querendo saber se a reestruturação dos meus aplicativos' urlconfs com vários aninhadas padrão de grupos de fornecer um aumento de desempenho para quando o Django procura por um pedido de correspondência de padrão.Eu não tenho certeza sobre como testar o desempenho, mas eu já tentei sair e a nova versão funciona, pelo menos.
Eu sei que, se houver um aumento de desempenho, pode muito bem ser insignificante.Eu só comecei a fazer isso para ver se os padrões seria mais fácil para olhar como uma árvore;Estou mais preocupado com a estragar as coisas que aumentando a velocidade.
O seguinte é um aplicativo urlconf incluído pelo mestre no urlconf /appname/
.
Velho urlconf:
from django.contrib.auth.decorators import login_required
from django.conf.urls.defaults import patterns, include, url
from django.views.generic.simple import redirect_to
from appname import views
urlpatterns = patterns('',
# Actions on sets of reports
url(r'^reports/page(?P<page>[0-9]+)/$', login_required(views.appnameListView.as_view())),
url(r'^reports/bill/', views.bill),
# Actions on individual reports
url(r'^report/new/', views.new),
url(r'^report/(?P<reportNumber>[^/]+)/$', views.detail),
url(r'^report/(?P<reportNumber>[^/]+)/delete/$', views.delete),
url(r'^report/(?P<reportNumber>[^/]+)/edit/$', views.edit),
url(r'^report/(?P<reportNumber>[^/]+)/print/$', views.detail_print),
# url(r'^report/(?P<reportNumber>[^/]+)/pdf/$', views.detail_pdf),
# Configure app settings
url(r'^config/$', views.configure),
url(r'^config/reporttype/(?P<id>[^/]+)/$', views.configure_ReportType),
url(r'^config/reporttype/(?P<id>[^/]+)/delete/$', views.configure_ReportType_delete),
url(r'^config/avgmethod/(?P<name>[^/]+)/$', views.configure_AvgMethod),
url(r'^config/avgmethod/(?P<name>[^/]+)/delete/$', views.configure_AvgMethod_delete),
url(r'^config/datatransformer/(?P<name>[^/]+)/$', views.configure_DataTransformer),
url(r'^config/datatransformer/(?P<name>[^/]+)/delete/$', views.configure_DataTransformer_delete),
# Catch all; #TODO: 404
url(r'^', redirect_to, {'url': '/appname/reports/page1/'}),
)
Novo urlconf:
from django.contrib.auth.decorators import login_required
from django.conf.urls.defaults import patterns, include, url
from django.views.generic.simple import redirect_to
from appname import views
urlpatterns = patterns('',
# Actions on sets of reports
url(r'^reports/', include(patterns('',
url(r'^page(?P<page>[0-9]+)/$', login_required(views.appnameListView.as_view())),
url(r'^bill/', views.bill),
))),
# Actions on individual reports
url(r'^report/', include(patterns('',
url(r'^new/', views.new),
url(r'^(?P<reportNumber>[^/]+)/$', views.detail),
url(r'^(?P<reportNumber>[^/]+)/delete/$', views.delete),
url(r'^(?P<reportNumber>[^/]+)/edit/$', views.edit),
url(r'^(?P<reportNumber>[^/]+)/print/$', views.detail_print),
# url(r'^(?P<reportNumber>[^/]+)/pdf/$', views.detail_pdf),
))),
# Configure app settings
url(r'^config/', include(patterns('',
url(r'^$', views.configure),
url(r'^reporttype/(?P<id>[^/]+)/$', views.configure_ReportType),
url(r'^reporttype/(?P<id>[^/]+)/delete/$', views.configure_ReportType_delete),
url(r'^avgmethod/(?P<name>[^/]+)/$', views.configure_AvgMethod),
url(r'^avgmethod/(?P<name>[^/]+)/delete/$', views.configure_AvgMethod_delete),
url(r'^datatransformer/(?P<name>[^/]+)/$', views.configure_DataTransformer),
url(r'^datatransformer/(?P<name>[^/]+)/delete/$', views.configure_DataTransformer_delete),
))),
# Catch all; #TODO: 404
url(r'^', redirect_to, {'url': '/appname/reports/page1/'}),
)
Eu poderia ir ainda mais longe (4 das 5 variáveis marcadas para com regex são definidos, pelo menos, duas vezes), mas tenho a preocupação de perder o original benefício de legibilidade.
Solução
Se você não quero repete-se e siga a SECO-princípio, que é, por vezes, incorporou um monte quando o desenvolvimento do django código, você deve grupo de urls.Então, você vai reduzir a quantidade de código duplicado e produzir um código que é muito mais fácil de manter.Pense, por exemplo, sobre o fato de que, mais tarde, você pode querer alterar o relatório/ urls para outra coisa, você teria de fazê-lo para cada url, em seguida,!