Google App Engine Python:从生产中缓慢加载的数据库查询中检索的图像

时间:2012-10-21 21:03:34

标签: python google-app-engine google-cloud-datastore

我有一个应用程序,用户可以从磁盘上传图像。那个形象 只要用户被记录,它就会显示在应用程序的每个页面中。

这是将图像加载到页面的模板部分:

{% if currentService.image %}
    <img src='img?img_id={{ currentService.key() }}'></img>
{% else %}
    <img src='static/no_image.jpeg' />
{% endif %}

这是我在控制器中进行重定向的方法:

def main():
    app = webapp2.WSGIApplication([
                                   ('/img', ImageHandler),
                                   ('/.*', MainPage)
                                   ],debug=True)
    wsgiref.handlers.CGIHandler().run(app)

这是相应的处理程序类:

class ImageHandler(webapp2.RequestHandler):
    def get(self):
        try:
            rsRequest = db.get(self.request.get("img_id"))
            if rsRequest.image:
                self.response.headers['Content-Type'] = "image/png"
                self.response.out.write(str(rsRequest.image))
            else:
                self.response.out.write("No Image")
        except:
            tb = traceback.format_exc()
            ErrorLog(descripcion = str(tb)).put()
            self.doRender('error_page.html', {'mensaje':tb})

这是模型类:

class Service(db.Model):
    name = db.StringProperty(required = True)
    image = db.BlobProperty()

一切正常。图像始终成功加载。

但是当我在生产中测试我的应用程序时,图像会逐渐加载。

当我在localhost中测试应用程序时,由于图像在开发中加载速度很快(如缓存图像),我不知道自己做错了什么。

我应该怎么做才能避免图像加载速度慢?

2 个答案:

答案 0 :(得分:2)

尝试从Blobstore提供图片,该图片旨在快速提供大型静态有效负载。它可能在您的本地主机上很快,因为dev_appserver将数据存储保留在内存中,但在生产中它会慢得多。

答案 1 :(得分:1)

可能有很多原因。你使用过chrome开发工具吗?

但是有一个聪明的解决方案。 Google可以为您提供图片。几乎免费且非常快。查看GAE Python图像API的get_serving_url。 这是一个例子(或没有https使用它):

https://lh6.ggpht.com/lOghqU2JrYk8M-Aoio8WjMM6mstgZcTP0VzJk79HteVLhnwZy0kqbgVGQZYP8YsoqVNzsu0EBysX16qMJe7H2BsOAr4j=s70