Проблема производительности Ruby и Timeout.timeout - PullRequest
1 голос
/ 08 января 2012

Я не уверен, как решить эту большую проблему с производительностью моего приложения. Я использую open-uri для запроса самых популярных видео с YouTube и когда я запускал perftools https://github.com/tmm1/perftools.rb

Это показывает, что самая большая проблема с производительностью - это Timeout.timeout. Кто-нибудь может подсказать мне, как решить проблему?

Я использую ruby ​​1.8.7.

Edit:

Это вывод моего профайлера

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B4bANr--YcONZDRlMmFhZjQtYzIyOS00YjZjLWFlMGUtMTQyNzU5ZmYzZTU4&hl=en_US

1 Ответ

0 голосов
/ 08 января 2012

Тайм-аут включает в себя функцию, которая фактически выполняет работу, чтобы гарантировать, что если сервер не ответит в течение определенного времени, код выдаст ошибку и остановит выполнение.

Я подозреваю, что вы видите, что серверу требуется некоторое время, чтобы ответить. Вам следует как-то взглянуть на кеширование ответа.

Например, используя memcached (псевдокод)

require 'dalli'
require 'open-uri'

DALLI = Dalli.client.new

class PopularVideos
  def self.get
    result = []
    unless result = DALLI.get("videos_#{Date.today.to_s}")
      doc = open("http://youtube/url")
      result = parse_videos(doc) # parse the doc somehow
      DALLI.set("videos_#{Date.today.to_s}", result)
    end
    result
  end
end

PopularVideos.get # calls your expensive parsing script once
PopularVideos.get # gets the result from memcached for the rest of the day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...