【发布时间】:2014-05-12 22:28:43
【问题描述】:
我们构建了一个包含 Angular 前端和 RoR 后端的动态问卷。因为有很多动态部分需要处理,所以不可能使用 ActionView 或 jbuilder 缓存助手。对于每个 Questionnaire 请求,都有相当多的查询要做,例如检查答案的有效性、检查依赖关系等。有没有推荐的策略来缓存动态 JSON 响应?
给出一个想法..
控制器代码:
def advance
# Decrypt and parse parameters
request = JSON.parse(decrypt(params[:request]))
# Process passed parameters
if request.key?('section_index')
@result_set.start_section(request['section_index'].to_i)
elsif request.key?('question_id')
if valid_answer?(request['question_id'], request['answer_id'])
@result_set.add_answer(request['question_id'],
request['answer_id'],
request['started_at'],
request['completed_at'])
else
return invalid_answer
end
end
render_item(@result_set.next_item)
end
next_item 可以是问题或部分,但也会返回进度指示器数据和可能之前给出的答案(可以导航)。此外,数据从前端加密发送到前端。
我们还构建了一个带有 Angular 前端的管理区域。在这方面,可以查看和比较调查问卷的结果。正在执行相当多的查询来查找子问题、可比较的问题等。我们发现它们很难缓存。在多个同时用户点击后,您可以填满服务器内存。
该应用部署在Passenger 上,我们已经根据服务器配置对配置进行了微调。结果存储在 Postgres 数据库中。
TLDR:在生产中,我们发现内存使用成为一个问题。可以对查询进行一些优化(特别包括),但是是否有推荐的策略来缓存动态 JSON 响应?
【问题讨论】:
标签: ruby-on-rails json caching activerecord memory-management