我的网站需要阅读一个慢速的网站,如何提高性能

时间:2010-07-10 08:08:48

标签: ruby-on-rails ajax performance proxy cross-domain

我正在编写一个带有rails的网站,可以让访问者输入一些域名并检查他们是否已经被域名化。

当用户点击“提交”按钮时,我的网站会尝试将一些数据发布到另一个网站,然后阅读结果。但是那个网站对我来说很慢,每个请求需要2到3秒。所以我担心表现。

例如,如果我的网络服务器最多允许100个进程,那么只有30或40个用户可以同时访问我的网站。这是不可接受的,有没有办法改善性能?

PS: 起初,我想使用ajax读取该网站,但由于“跨域”问题,它不起作用。所以我必须使用这个“ajax代理”解决方案。

3 个答案:

答案 0 :(得分:1)

您可以使用HTTP HEAD请求,而不是将某些数据发布到网站,我相信这应该只返回该URL的标头信息。

我通过google搜索找到了这段代码:

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

这可能比POST请求更快,您不必等待接收该资源的全部内容。您应该能够根据响应代码确定该站点是否正在使用中。

答案 1 :(得分:1)

这是一项工作,但您可以使用类似DelayedJob的内容来处理后台其他网站的请求。

DelayedJob创建单独的工作进程,查看jobs表以查找要执行的操作。当用户单击“提交”时,将创建此类作业,并开始在其中一个工作程序中运行。这可以减轻您的Rails工作人员的负担,并使您的网站保持活泼。

但是,您必须在作业运行时在浏览器中创建某种轮询机制。也许使用刷新或一些简单的AJAX。这样,访问者就可以看到诸如“片刻,请...”之类的消息,并在一段时间后看到实际结果。

答案 2 :(得分:1)

尝试使用typhoeus而不是AJAX来获取身体。您可以POST该站点的域名以使用typhoeus进行检查,并可以解析所提取的响应。与其他解决方案相比,它速度极快。我从github repo http://github.com/pauldix/typhoeus从wiki页面中删除的片段显示您可以并行运行请求(考虑到ajax请求需要1到2秒,这可能是您想要的!):< / p>

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 =真棒!