多语言网站数据缓存的问题 - Python - Google App Engine

时间:2015-12-16 11:23:19

标签: python google-app-engine caching server-side multilingual

问题:

在Web服务器上进行多语言数据缓存的最有效方法是什么,因为客户端需要相同的基本数据集,但需要使用其语言环境格式。因此,最多1000个数据项将被缓存,然后以特定的语言环境格式按需呈现。

我目前的做法如下:

我有一个多语言的python Google App Engine项目。多语言部分使用Babel和各种语言.po和.mo文件进行翻译。这一切都很好,花花公子。在考虑缓存数据时开始出现问题。例如,假设我有1000个产品列表,我希望客户一次只能访问100个。如果memcache被炸毁,我将memcache与数据存储备份实体一起使用。同样,一切都很好,花花公子,但不是多语言。必须映射每个产品以使密钥与任何客户端的特定区域设置匹配,英语,法语,土耳其语等等。我现在这样做的方法是将产品映射到特定的区域设置,例如' en_US',并使用jinja2模板渲染服务器端。特定于多语言的每一位数据都是使用日期,价格格式标题等的区域设置来呈现的。 ' en_US'格式化并放入数据存储区和memcache中,所有这些都很好地映射出来以备渲染。但是,我还有一个额外的步骤可以将这些多语言数据转换为客户区域设置的正确格式,这是通过标准{{}}翻译和jinja2过滤器,通常用于价格格式和日期等内容。问题是这会减慢速度,因为这一切都必须在服务器上呈现,然后传递回客户端。最初的100个产品总是在服务器端呈现,但是,在缓存之前,我通过对服务器的ajax调用从JSON数据渲染其余客户端。现在它是所有服务器端渲染。

我不想参加有关服务器端与客户端渲染的马拉松式讨论,但我很欣赏任何其他人如何成功处理多语言缓存的见解

1 个答案:

答案 0 :(得分:1)

我假设使用特定语言的单个产品呈现占整个页面渲染工作的大部分(或至少很大一部分)。

您可以使用2D product x language查找方案,在将完整结果页面中的组合结果发送到客户端之前,将服务器端的特定语言的呈现产品结果缓存。

您还可以在任务队列中呈现单个产品信息离线,无论何时添加/修改产品,并提前将它们存储/缓存在服务器上。也许仅适用于使用最频繁的语言?

通过这种方式,您可以避免在关键路径上呈现单个产品 - 响应客户端请求,但会增加内存缓存/存储空间。

你只需要:

  • 将渲染分为两个阶段(单个产品信息和完整的结果页面装配)
  • 在产品添加/更改/删除操作时添加用于清理/更新存储/缓存的已呈现产品信息的逻辑
  • (可能)在客户端请求进入时(如果不接受,只是不显示信息)预呈现信息时,为按需产品信息呈现添加逻辑

可能想要检查是否优先缓存/存储压缩的渲染产品信息(html压缩得很好) - 平衡memcache /存储成本与实例运行时成本与响应时间性能(我还没有)做这样的实验)。