我创建了一个插件表单,用于搜索我独立定义的某个用户字段中的用户。
我使用了 Web API 将用户信息存储在外部数据库(AWS DynamoDB)中,并从中提取数据进行搜索。
class DiscourseUserSearchController < ApplicationController
def index
end
def search
dynamodb = Aws::DynamoDB::Client.new(
access_key_id: ENV['ACCESS_KEY_ID'],
secret_access_key: ENV['SECRET_ACCESS_KEY'],
region: AWS_REGION
)
scan_condition = {
table_name: "DiscourseUserInformation"
}
result = dynamodb.scan(scan_condition)
result = result.items
Rails.logger.info result
data = result.map do |user_data|
user = User.find(user_data['UserID'])
user_data['avatar_template'] = user.avatar_template
user_data['username'] = user.username
next user_data
end
render status: 200, json: { status: 200, data: data }
end
end
上面的代码在页面打开时获取所有用户,并将它们传递给 Angular。
这工作正常,但响应需要 3500 毫秒,这不太理想。(大约搜索 1400 个用户)。
我认为问题在于我在循环中执行了 User.find(user_data['UserID']),但我无法想到更好的方法。
我想显示用户卡片,所以我认为有必要在 Ruby 中获取用户,但我很乐意获得关于如何使其更快的建议。