لقد قمت بإنشاء نموذج كمكون إضافي يبحث عن مستخدم من حقل مستخدم قمت بتعريفه بشكل مستقل.
لقد استخدمت 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، ولكنني سأكون سعيدًا بتلقي اقتراحات حول كيفية جعلها أسرع.