代码之家  ›  专栏  ›  技术社区  ›  JJ Geewax

在app.yaml中定义路由与在appengine中的wsgiapplication中定义一个大型映射相比,是否会提高性能?

  •  17
  • JJ Geewax  · 技术社区  · 15 年前

    场景1

    这涉及到在 app.yaml 然后选择 RequestHandler WSGIApplication .

    App.YAML

    - url: /.*
      script: main.py
    

    Me.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
    

    p1.1.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()
    

    Pa2.2.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()
    

    问题

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

    2 回复  |  直到 15 年前
        1
  •  12
  •   Nick Johnson    15 年前

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

    不过,这是非常小的,因为您可以很容易地让处理程序脚本动态地按需加载所需的模块——这正是许多通用框架已经做到的。

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

        2
  •  6
  •   Jason Hall    15 年前

    我不相信有任何性能方面的影响,但是根据功能将你的应用拆分成文件将帮助你更好地管理它,特别是如果它是由多个人开发的。

    例如,与查看、编辑、删除等有关的所有处理程序都可以位于 pages.py 虽然所有处理程序都与查看等有关,但用户配置文件可能位于 user_profiles.py 以及所有与JSON REST API有关的处理程序都可以位于 rest_api.py 等等。

    但我还是不相信 运行时 性能含义,只是 开发时间 性能含义。