Ruby を使用してドメインの可用性を確認していますが、コードの実行速度が非常に遅くなります。リクエスト全体でWhoisオブジェクトをキャッシュするとパフォーマンスが向上しますが、SOに関する他の投稿では、パフォーマンスが向上したとしてもわずかにしか向上しないことが示唆されています.
コードはとてもシンプルです。他の改善が可能かどうか、それとも Whois オブジェクトのせいで検索が遅いだけなのかはわかりません。
bulk_checkメソッドは、検索するドメインの配列を受け入れます。他のすべては、かなり自明です。
Rails 3 を使用しています。
助言がありますか?
ありがとう!
def bulk_check
domains = params[:domains] || '[]'
callback = params[:callback] || ''
results = []
threads = []
# String -> Array
domains = ActiveSupport::JSON.decode domains
# Iterate over each domain and spawn new thread to check domain status
domains.each do |d|
threads << Thread.new(d) { |my_domain|
Thread.current['domain'] = my_domain
Thread.current['status'] = get_domain_status my_domain
}
end
# Wait for threads to finish and update results array
threads.each do |t|
t.join
results.push [ t['domain'], t['status'] ]
end
# Render results
respond_to do |type|
type.json { render :json => { :results => results }.to_json, :callback => callback }
end
end
def get_domain_status domain
begin
# Create Whois object
whois = Whois::Client.new
# Query Whois for domain data
result = whois.query domain
# Prep JSON response
status = result.available? ? 'available' : 'taken'
rescue Exception => e
puts "Exception in parsing '#{domain}' status: #{e.message}"
status = 'error'
end
# Return status
return status
end