Django Urlconf Performance Performance: вложенными группами шаблонов помогают или болят?

StackOverflow https://stackoverflow.com/questions/8980365

Вопрос

Мне интересно, если реструктуризация моих приложений «URLConfs с несколькими вложенными группами будет обеспечивать повышение производительности, когда Django ищет шаблон соответствия запроса.Я не уверен, как проверить производительность, но я попробовал, и новая версия работает по крайней мере.

Я знаю, что если существует повышение производительности, это может быть также незначительным.Я только начал делать это, чтобы увидеть, было ли узоры будут легче посмотреть как дерево;Я больше беспокоюсь о том, чтобы прикручивать вещи, чем скорость повышения.

Ниже приложено urlconf приложение, которое включено главным URLCONF на /appname/.

Старый 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/'}),
)
.

Новый 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/'}),
)
.

Я мог бы пойти еще дальше (4 из 5 переменных, проверяемых с регулярным выражением, определяются как минимум дважды), но я беспокоюсь о том, чтобы потерять первоначальную пользу читаемости.

Это было полезно?

Решение

Если вы не хотите пожать себе и следуйте сухому принципу, который иногда включает много при разработке кода Django, вы должны группировать ваши URL.Таким образом, вы уменьшите сумма дубликата кода и создаем код, который намного проще поддерживать.Подумайте, например, о том, что позже вы можете захотеть изменить отчет / URL-адреса к чему-то еще, вам придется сделать это для каждого URL-адреса!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top