2013-09-27 4 views
1

Comment puis-je accélérer les résultats de recherche générés par l'envoi d'un ping à l'API Lastfm?Comment augmenter la vitesse de recherche d'une API externe?

Voici le code que nous travaillons avec:

def self.search(term) 
    LastfmAPI.artist_search(term).map { |a| Lastfm::Artist.new(a) } 
    end 

    # Name and lastfm_id are synonyms                               
    def name 
    self.lastfm_id 
    end 

    def past_events(geo=nil, options={}) 
    events = self.events.past 
    lastfm_count = LastfmAPI.artist_getPastEvents_count(self.lastfm_id) 

    # Check if database is current                                
    if events.count == lastfm_count # TODO: && the first event itself matches entirely                   
     # TODO: extract above comparison to method                            

     # return only those in the correct radius                            
     events = events.in_radius(geo) if geo.present? 
    else 
     # if not current, make array of Lastfm::Event objects from API call                      
     events = LastfmAPI.artist_getPastEvents_all(self.lastfm_id, lastfm_count).map do |e| 
    Saver::Events.perform_async(e) # send to worker to save to database                     

    Lastfm::Event.new(e) 
     end 

Répondre

1

Lorsque vous êtes en fonction des services externes, il n'y a pas beaucoup que vous pouvez faire pour accélérer l'exécution effective de leur service. Le mieux que vous puissiez faire est de mettre les choses en cache localement dans votre propre application afin de ne pas faire l'aller-retour aussi souvent.

+0

Malheureusement, je ne peux pas voter parce que je n'ai pas encore 15 représentants. Mais votre réponse est appréciée Jeremy. Nous mettons actuellement les données en cache, ce qui améliore les résultats de recherche, car plus de données sont mises en cache localement. Mais les nouvelles recherches sont encore relativement lentes et je suppose que c'est hors de notre contrôle. – user2821877

Questions connexes