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.

Foi útil?

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,!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top