小编典典

通过在app.yaml中定义路由与在AppEngine中的WSGIApplication中进行一个大型映射相比,可以提高性能?

python

场景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.pypage2.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()

每种模式的优点和缺点是什么?一个比另一个快吗?


阅读 344

收藏
2021-01-20

共1个答案

小编典典

唯一的性能影响与模块的加载有关:模块在首次使用时就加载到实例上,并且拆分成块需要较少的模块加载量才能在新实例上提供页面。

但是,这非常少,因为您可以轻松地使处理程序脚本按需动态加载所需的模块-而这正是许多常见框架所做的。

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

2021-01-20