Мой веб-сайт должен прочитать медленный веб-сайт, как улучшить производительность - PullRequest
0 голосов
/ 10 июля 2010

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

Когда пользователь нажимает кнопку «Отправить», мой веб-сайт пытается опубликовать некоторые из них.данные на другой веб-сайт, и прочитайте результат обратно.Но этот сайт медленный для меня, каждый запрос требует 2 или 3 секунды.Поэтому я беспокоюсь о производительности.

Например, если мой веб-сервер допускает не более 100 процессов, то только 30-40 пользователей могут одновременно посещать мой сайт.Это неприемлемо, есть ли способ улучшить производительность?

PS: Сначала я хочу использовать ajax для чтения этого веб-сайта, но из-за «междоменного»проблема, это не работаетПоэтому я должен использовать это решение "ajax proxy".

Ответы [ 3 ]

1 голос
/ 10 июля 2010

Это немного больше работы, но вы можете использовать что-то вроде DelayedJob для обработки запросов к другому сайту в фоновом режиме.

DelayedJob создает отдельные рабочие процессы, которые смотрят на jobs столик для занятий.Когда пользователь нажимает кнопку Отправить, такая работа создается и запускается на одном из этих работников.Это разгрузит ваших сотрудников Rails и сделает ваш сайт быстрым.

Однако вам придется создать какой-то механизм опроса в браузере во время выполнения задания.Возможно, используя обновление или какой-нибудь простой AJAX.Таким образом, посетитель мог увидеть сообщение типа «Один момент, пожалуйста ...», а через некоторое время - реальные результаты.

1 голос
/ 10 июля 2010

Попробуйте использовать Typhoeus, а не AJAX, чтобы получить тело.Вы можете POST доменные имена для этого сайта, чтобы проверить с помощью typhoeus и может проанализировать полученный ответ.Это очень быстро по сравнению с другими решениями.Фрагмент, который я скопировал со страницы вики из репозитория github http://github.com/pauldix/typhoeus, показывает, что вы можете выполнять запросы параллельно (что, вероятно, то, что вы хотите, учитывая, что для запроса ajax требуется 1-2 секунды !!)

hydra = Typhoeus::Hydra.new

first_request = Typhoeus::Request.new("http://localhost:3000/posts/1.json")
first_request.on_complete do |response|
  post = JSON.parse(response.body)
  third_request = Typhoeus::Request.new(post.links.first) # get the first url in the post
  third_request.on_complete do |response|
    # do something with that
  end
  hydra.queue third_request
  return post
end
second_request = Typhoeus::Request.new("http://localhost:3000/users/1.json")
second_request.on_complete do |response|
  JSON.parse(response.body)
end
hydra.queue first_request
hydra.queue second_request
hydra.run # this is a blocking call that returns once all requests are complete

first_request.handled_response # the value returned from the on_complete block
second_request.handled_response # the value returned from the on_complete block (parsed JSON)

Также Typhoeus + delayed_job = УДИВИТЕЛЬНЫЙ!

1 голос
/ 10 июля 2010

Вместо публикации некоторых данных на веб-сайтах вы можете использовать запрос HTTP HEAD, который (я считаю) должен возвращать только информацию заголовка для этого URL.

Я нашел этот код, немного погуглив:

require "net/http"
req = Net::HTTP.new('google.com', 80)
p req.request_head('/')

Это, вероятно, будет быстрее, чем запрос POST, и вам не придется ждать, чтобы получить все содержимое этогоресурс.Вы должны быть в состоянии определить, используется ли сайт на основе кода ответа.

...