type standard google features engine app python performance google-app-engine yaml

python - standard - ¿Hay una mejora en el rendimiento al definir rutas en app.yaml en comparación con una asignación grande en una aplicación WSGIA en AppEngine?



google app engine features (2)

La única implicación de rendimiento se relaciona con la carga de módulos: los módulos se cargan en una instancia cuando se usan por primera vez, y dividir las cosas requiere menos cargas de módulos para servir una página en una nueva instancia.

Sin embargo, esto es bastante mínimo, ya que puede hacer que el script del manejador cargue dinámicamente el módulo necesario a pedido, y eso es lo que muchos marcos comunes ya hacen.

En general, el enrutamiento app.yaml está diseñado para enrutar entre distintos componentes o aplicaciones. Por ejemplo, remote_api y aplazado tienen sus propios controladores. Por lo tanto, es perfectamente razonable tener un único controlador definido para su aplicación que maneje todo lo demás.

escenario 1

Esto implica usar una ruta de "puerta de enlace" en app.yaml y luego elegir RequestHandler en la aplicación 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()

Escenario 2:

Esto implica definir dos rutas en app.yaml y luego dos scripts separados para cada una ( page1.py y 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()

Pregunta

¿Cuáles son los beneficios y desventajas de cada patrón? ¿Es uno mucho más rápido que el otro?


No creo que haya ninguna implicación de rendimiento, pero dividir su aplicación en archivos basados ​​en la funcionalidad lo ayudará a administrarla mejor, especialmente si está siendo desarrollada por varias personas.

Por ejemplo, todos los controladores que tienen que ver con la visualización, edición, eliminación, etc., pueden estar en pages.py mientras que todos los controladores que tienen que ver con la visualización, etc., los perfiles de usuario pueden estar en user_profiles.py , y todos los manejadores que tienen que ver con una API REST de JSON podrían estar en rest_api.py , y así sucesivamente.

Pero, de nuevo, no creo que esto tenga ninguna implicación de rendimiento en tiempo de ejecución, solo una implicación de rendimiento en tiempo de desarrollo .