2016-02-09 43 views
0

所有產品現在我這個代碼來獲得的所有產品在用戶存儲陣列:加快獲得使用Shopify API

# Write loop to get all if more than 1 page 
@store_products = [] 
page = 1 

while 1 

    products = ShopifyAPI::Product.find(:all, :params => {:limit => 250, :page => page, :fields=> "id,title,images"}) 

    break if products.length == 0 

    products.each do |product| 
    @store_products << product 
    end 

    page = page + 1 

end 

然而,如果店裏有4000+的產品它會減慢應用程序的加載時間顯着,有時超時。有沒有更好的方式來做到這一點。另外,是否可以使用Redis來單獨緩存產品或產品陣列?這甚至會有好處嗎?如果有的話,我一直試圖通過邊緣速度改善來實現這一目標。

以下是我正在做的是,在視圖的腳本:

<% products_to_cache = @store_products.to_json.html_safe %> 

<% cache(products_to_cache) do %> 
    var products = <%= products_to_cache %>; 
<% end %> 
+0

你絕對不應該在rails應用程序(或任何其他應用程序)中做外部請求同步。將其作爲後臺作業,並在完成後將項目推送到客戶端,或使用cron作業預加載信息。 – Oleander

+0

@Oleander如何在後臺作業中將store_products推到視圖中?假設我正在使用sidekiq。 – Senju

+0

讓後臺作業填充緩存,然後使用websocket將信息推送到客戶端 – Oleander

回答

0

假設ShopifyAPI是通過HTTP,你可以使用typhoeus來並行地執行外部API調用。

雖然它可能會產生顯着的性能下降,但請注意,您將無法使用ShopifyAPI客戶端 - 您需要使用typhoeus構建請求。