如何通过数据URI方案在模板中显示来自ndb数据存储的图像(无需另发请求)
我把缩略图图片存储为实体的一个blob属性。我可以按照这里的描述正常提供这些图片:在Python(App Engine)中显示Blob图片。
不过,这样做需要再发一个请求,通过ID从ndb中获取图片。因为在我渲染标签并设置合适的href属性时,原始实体已经可以使用了,是否有办法使用数据URI方案直接渲染图片呢?
我查看了谷歌图片API的文档,但似乎没有可以将我的图片转换为所需格式的方法,以便将其作为字符串包含进去。我也在网上查了很多资料,但大家似乎都在建议使用上面提到的从数据存储中渲染图片的解决方案。在我看来,能够使用URI方案渲染图片不仅可以节省数据存储的请求(大概率会从内存缓存中获取,但仍然),更重要的是可以为我的页面访问者节省一次跨洋的请求,这样会大大加快页面的加载速度。
非常感谢大家的帮助!
1 个回答
1
使用图片服务后,图片会从一个快速的图片服务平台提供,这个平台通常离你的用户更近,比你自己在GAE上搭建的服务要好。
https://developers.google.com/appengine/docs/python/images/functions
get_serving_url(blob_key, size=None, crop=False, secure_url=None)
这个功能会返回一个可以用来展示图片的网址。
这个网址的格式支持动态调整大小和裁剪,所以你不需要在服务器上存储不同大小的图片。图片会从一个高度优化的、没有cookie的基础设施中快速提供,延迟很低。
这样做还可以避免多次访问数据库,因为你只需要存储这个网址,然后把它提供给用户。