1
即時通訊解析一些RSS使用'簡單的RSS'寶石。飼料是巨大而沉重的,但我仍然想知道如果我做錯了什麼,因爲過程似乎是無止境的。簡單的RSS寶石採取年齡解析
我使用delayed_job在後臺運行進程。 Here's控制器:
class ApiController < ApplicationController
respond_to :html, :json
require 'open-uri'
FEED_URI = 'http://rss....'
def get_feed
Delayed::Job.enqueue FeedJob.new(FEED_URI)
@events = Event.all
end
end
然後來到這個類:
class FeedJob < Struct.new(:uri)
require 'rubygems'
require 'simple-rss'
require 'open-uri'
def perform
entryAttr = Event::TAGS + Session::TAGS + Venue::TAGS #IM ADDING AROUND 30 TAGS
SimpleRSS.item_tags += entryAttr #HERE
rss = SimpleRSS.parse open(uri)
rss.entries.each do |entry|
venue = Venue.find_by_map_number(entry.venueMapNumber) || Venue.new
save_venue(venue,entry)
event = Event.find_by_guid(entry.eventGuid) || Event.new
save_event(event,entry,venue)
session = Session.find_by_guid(entry.sessionGuid) || Session.new
save_session(session,entry,event)
end
end
end
任何有識之士將是有益的。
這一些好的信息卡爾,謝謝。但在這種情況下,它甚至不會進入「entries.each」循環。所以是的,我會說SimpleRSS會花費這麼長時間(我懷疑這可能是因爲它有很多custon標籤) – ntonnelier
有趣。我對SimpleRSS不太熟悉。 rss有多大?大量的XML庫開始堵塞大文件,因爲它們會導致庫分配大量對象,並可能導致系統內存不足。你可能需要看看使用了一個平衡的XML解析器,比如'Nokogiri :: XML :: SAX'。它當然可以是你提到的標籤。最好的方法是使用[profiler](https://github.com/ruby-prof/ruby-prof)查看你的代碼並查看哪些方法調用花費最多時間,然後從中進行調查。 –
另外,你確定解析實際上是緩慢的,或者它可能是HTTP抓取? –