我的Rails操作相对于我的应用程序的其余部分非常慢。它要求来自两个不同来源的数据。一旦从每个源中提取了数据,我就会遍历数据并与当前数据库进行比较,如果不存在类似的记录则创建记录。
我下面有几个型号。歌曲模型通常有一个RdioMeta或一个SoundcloudMeta,每个都包含分别从Rdio和Soundcloud中提取的信息。
def搜索 @search = []
rdio_client = RdioApi.new consumer_key: 'consumer_key', consumer_secret: 'consumer_secret'
rdio_results = rdio_client.search(query: params[:query], types: "track", count: 25)
sc_client = Soundcloud.new client_id: 'client_id'
sc_results = sc_client.get('/tracks', q: "%#{params[:query]}%")
rdio_results.results.each do |result|
song = Song.includes(:rdio_meta).where(name: result[:name], artist: result[:artist]).first_or_initialize do |song|
rdio_meta = RdioMeta.new url: result[:key], duration: result[:duration]
song.rdio_meta = rdio_meta
end
song.save
@search << song
end
sc_results.each do |result|
song = Song.includes(:soundcloud_meta).where(name: result[:title], artist: result[:user][:username]).first_or_initialize do |song|
rdio_meta = SoundcloudMeta.new url: result[:stream_url], duration: result[:duration]
song.rdio_meta = rdio_meta
end
song.save
@search << song
end
render json: @search, root: 'songs'
端
我的问题是双重的。一,我习惯了JavaScript和异步请求/承诺,那么在Ruby / Rails中处理异步的最佳方法是什么?第二,我对原始代码进行了大量重构,但我认为它可能会更好。我可以对代码进行任何优化吗?