2012-01-24 3 views
2

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

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

Ниже приведен 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 переменных проверяются на наличие в регулярном выражении определяются по крайней мере в два раза), но я беспокоюсь теряя первоначальное преимущество читаемости.

+2

Как вы сказали, если есть улучшение скорости, это незначительно. здесь, кажется, нет никаких вопросов. все знают, что если вам нужно повысить производительность, лучше потратить время на поиск запросов к базе данных. :) – akonsu

+1

Почему бы вам не профилировать и не вернуться к нам? – Thomas

ответ

2

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

+1

Очень верно, просто имейте в виду: [Cool URIs не меняются] (http://www.w3.org/Provider/Style/URI)! ;) –

+0

@ JanPöschko: Ну думал также добавить это, но также может быть много URL-адресов для использования администратором и т. Д., Которые могут измениться из-за измененной функциональности сайта :) И, кроме того, поскольку вы указываете URI: Если вы _group_ ваши URL-адреса, вы получите намного проще и лучше понять, какие шаблоны принадлежат тому, что принадлежит ressource ... –

 Смежные вопросы

  • Нет связанных вопросов^_^