Существует ли увеличение производительности от определения маршрутов в app.yaml по сравнению с одним большим отображением в WSGIApplication в AppEngine?

Сценарий 1

Это вовлекает использование одного маршрута "шлюза" в app.yaml и затем выбор RequestHandler в WSGIApplication.

app.yaml

- url: /.*
  script: main.py

main.py

from google.appengine.ext import webapp

class Page1(webapp.RequestHandler):
    def get(self):
        self.response.out.write("Page 1")

class Page2(webapp.RequestHandler):
    def get(self):
        self.response.out.write("Page 2")

application = webapp.WSGIApplication([
    ('/page1/', Page1),
    ('/page2/', Page2),
], debug=True)

def main():
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()

Сценарий 2:

Это вовлекает определение двух маршрутов в app.yaml и затем два отдельных сценария для каждого (page1.py и page2.py).

app.yaml

- url: /page1/
  script: page1.py
- url: /page2/
  script: page2.py

page1.py

from google.appengine.ext import webapp

class Page1(webapp.RequestHandler):
    def get(self):
        self.response.out.write("Page 1")

application = webapp.WSGIApplication([
    ('/page1/', Page1),
], debug=True)

def main():
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()

page2.py

from google.appengine.ext import webapp

class Page2(webapp.RequestHandler):
    def get(self):
        self.response.out.write("Page 2")

application = webapp.WSGIApplication([
    ('/page2/', Page2),
], debug=True)

def main():
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()

Вопрос

Каковы преимущества и недостатки каждого шаблона? Один намного быстрее, чем другой?

17
задан JJ Geewax 11 June 2010 в 20:26
поделиться

2 ответа

Единственное влияние на производительность связано с загрузкой модулей: Модули загружаются в экземпляр при первом использовании, и разделение требует меньшего количества загрузок модулей для обслуживания страницы в новом экземпляре.

Однако это довольно минимально, поскольку вы можете просто заставить скрипт обработчика динамически загружать нужный модуль по требованию - именно так уже поступают многие распространенные фреймворки.

В целом, маршрутизация app.yaml предназначена для маршрутизации между отдельными компонентами или приложениями. Например, remote_api и deferred имеют свои собственные обработчики. Поэтому вполне разумно иметь один обработчик, определенный для вашего приложения, который обрабатывает все остальные.

12
ответ дан 30 November 2019 в 14:00
поделиться

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

Например, все обработчики, которые имеют отношение к просмотру, редактированию, удалению и т. Д. Страниц, могут находиться в pages.py , в то время как все обработчики, которые имеют отношение к просмотру и т. Д., Профилям пользователей может быть в user_profiles.py , а все обработчики, имеющие отношение к JSON REST API, могут быть в rest_api.py , и так далее.

Но опять же, я не верю, что это имеет какое-либо влияние на производительность времени выполнения , а просто влияние на производительность времени разработки .

6
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: