Django UrlConfのパフォーマンス:パターングループに役立つか傷つけますか?
-
12-11-2019 - |
質問
あなたのアプリのurlconfsがいくつかの入れ子になっているurlconfsの再構築が、Djangoがリクエストマッチングパターンを探したときのパフォーマンスの向上を提供します。パフォーマンスをテストする方法についてはよくわかりませんが、私はそれを試してみました、そして新しいバージョンは少なくとも働きます。
パフォーマンス上昇がある場合は、ごくわずかな場合があります。パターンがツリーとして見えやすいかどうかを確認するためにこれをし始めました。私はブーストスピードよりも物事をねじ込むことをより心配しています。
次は、/appname/
のマスターURLCONFによって含まれているアプリのURLCONFです。
古い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/'}),
)
.
私はさらに進むことができた(正規表現で確認された5つの変数のうち4つの変数は少なくとも2回定義されます)、私は読みやすさの元の利点を失うことを心配しています。
解決
あなたがを再ピートしたくない場合は、を再ピートし、Djangoコードを開発するときに多くを組み込んだ乾いた原則に従います.URLをグループ化する必要があります。したがって、あなたは重複したコードを減らして、維持がはるかに簡単なコードを生成します。たとえば、後でレポート/ URLを他のものに変更したいという事実について考えてください。
所属していません StackOverflow