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

发布于 2021-01-29 15:06:27

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

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

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看