在app.yaml中定义路由与AppEngine中的WSGIApplication中的一个大映射相比,是否有性能提升?

JJ *_*wax 17 python performance google-app-engine yaml

场景1

这包括使用一个"门户"的路线app.yaml,然后选择RequestHandlerWSGIApplication.

的app.yaml

- url: /.*
  script: main.py
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

场景2:

这涉及app.yaml为每个(page1.pypage2.py)定义两个路由,然后定义两个单独的脚本.

的app.yaml

- url: /page1/
  script: page1.py
- url: /page2/
  script: page2.py
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

每种模式的好处和缺点是什么?一个比另一个快得多吗?

Nic*_*son 12

唯一的性能影响与模块的加载有关:模块在第一次使用时加载到实例上,而拆分则需要更少的模块加载来为新实例上的页面提供服务.

然而,这是非常小的,因为您可以轻松地让处理程序脚本按需动态加载所需的模块 - 这就是许多常见框架已经做的事情.

通常,app.yaml路由设计用于在不同的组件或应用程序之间进行路由.例如,remote_api和deferred都有自己的处理程序.因此,为您的应用程序定义一个处理其他所有内容的处理程序是完全合理的.


Jas*_*all 6

我不相信有任何性能影响,但根据功能将您的应用程序拆分为文件将有助于您更好地管理它,特别是如果它由多人开发.

例如,所有与查看,编辑,删除等页面pages.py有关的处理程序都可以在,而所有与查看等用户配置文件user_profiles.py有关的处理程序都可以在,并且所有处理程序都与JSON REST API可以在rest_api.py,等等.

但同样,我不认为这有任何运行时性能影响,只是开发时性能影响.