0

我正在用 jinja2 用 python 编写的谷歌应用引擎上运行一个网站。我已经使用 memcached 处理数据库中的大部分内容,但我不清楚如何提高从 blobstore 提供的图像的效率。我认为 GAE 与任何其他框架都没有太大不同,但我想提一下以防万一。

无论如何,有没有推荐的方法来缓存图像或防止它们耗尽我的读写配额?

4

3 回答 3

1

Blobstore 很好。

只需确保在 url 处理程序中设置 HTTP 缓存标头即可。这允许您的文件被浏览器缓存(在这种情况下您无需支付任何费用)或 App Engine 的边缘缓存,您将在其中支付带宽而不是 blobstore 访问。

不过要非常小心边缘缓存。如果您设置的过期时间过长,用户将永远不会看到更新的版本。通常,解决方案是在更改版本时更改 url。

于 2012-09-25T14:23:59.783 回答
0

我的建议是使用Google Cloud Storage来存储您的图像。它更适合并推荐用于提供静态文件。好消息是,现在您可以为此使用相同的 Images api:

注意:您还可以提供存储在Google Cloud Storage中的图像。为此,您需要使用 Blobstore API create_gs_key()函数生成 Blob 密钥。您还需要在正在使用的存储桶上设置默认对象ACLFULL_CONTROL ,以授予您的应用程序权限,以便图像服务可以将自己的 ACL 添加到对象。有关 ACL 和权限的信息,请参阅 Google Cloud Storage 的文档。

PS。我喜欢这里的另一个很棒的功能是,如果您需要以不同尺寸提供图像,则不必存储图像的不同分辨率。您只需将参数添加到返回的 url 中即可get_serving_url。此外,您只需调用get_serving_url一次,将此 url 存储在某处,并在需要提供图像时使用它。另外,您可以重复使用相同的 url 来提供所有不同尺寸的相同图像。

网址修改:

=sXX 要调整图像大小,请将 =sXX 添加到图像 URL 的末尾,其中 XX 是从 0 到 1600 的整数,表示新图像大小(以像素为单位)。最大大小在 IMG_SERVING_SIZES_LIMIT 中定义。API 将图像大小调整为提供的值,将指定大小应用于图像的最长尺寸并保留原始纵横比。例如,如果您使用 =s32 调整 1200x1600 图像的大小,则生成的图像是 24x32。如果该图像为 1600x1200,则调整大小的图像将为 32x24 像素。

=sXX-c 要裁剪和调整图像大小,请将 =sXX-c 附加到图像 URL 的末尾,其中 XX 是从 0 到 1600 的整数,表示新图像大小(以像素为单位)。最大大小在 IMG_SERVING_SIZES_LIMIT 中定义。API 将图像大小调整为提供的值,将指定大小应用于图像的最长尺寸并保留原始纵横比。如果图像是纵向的,API 会从顶部和底部均匀地切出一个正方形。如果图像是横向的,API 会从左右均匀地切出一个正方形。裁剪后,API 将图像调整为指定大小。

于 2012-09-25T09:53:18.197 回答
0

您可以使用谷歌图片 API https://developers.google.com/appengine/docs/python/images/functions

我通常做的是在上传时,我存储由 images.get_serving_url(blob_key) 创建的 url。不确定它是否更便宜,但在我的开发服务器上,每次调用 get_serving_url 都会创建一个数据存储写入。

于 2012-09-25T01:11:24.943 回答