2013-07-12 20 views
7

Tôi đang truy cập các máy chủ khác nhau cho dữ liệu và tôi đã thử các phương thức khác nhau trong các lớp khác nhau, sử dụng http: net, curb, rest-client cơ bản và open-uriHiệu suất Ruby/Rails: OpenURI so với NET: HTTP vs Curb vs Rest-Client

(1) Làm cách nào để đo lường hiệu suất trong Ruby/Rails nói chung? (2) Bạn nghĩ phương pháp nào nhanh hơn?

Mẫu mã từ khắp 4 phương pháp khác nhau:

url = "..." 
    begin 
    io_output = open(url, :http_basic_authentication => [@user_id, @user_password]) 
    rescue => e 
    error = e.message #for debugging return this 
    return '-' 
    else 
    output = io_output.read 

hoặc

require 'net/https' 
uri = URI.parse("...") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
data = http.get(uri.request_uri) #http request status 
res = Net::HTTP.get_response(uri) 
puts res.body if res.is_a?(Net::HTTPSuccess) 

hoặc

require 'curb' 
url = "..." 
c = Curl::Easy.new(url) do |curl| 
curl.headers["Content-type"] = "application/json" 
curl.headers["Authorization"] = "Token ..." 
end 
c.perform 
puts c.body_str 

hoặc

url = "..." 
resource = RestClient::Resource.new(url, 
     :headers => { :Authorization => "Token ...", 
     :content_type => "application/json"}) 
begin 
output = resource.get 
rescue => e 
error = e.message #for debugging return this 
return '-' 
else ... 
end 
+0

Tôi tìm thấy http://www.ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html Tôi sẽ thử nó – nevermind

+0

Đăng kết quả của bạn làm câu trả lời. Tôi rất tò mò muốn gặp họ. –

+1

Tôi sẽ làm thử nghiệm nhiều hơn nhưng! chạy này cho 5 lần cho mỗi khách hàng: http :: net ~ 13 giây mở-uri ~ 8 giây nghỉ ngơi-khách hàng ~ 6,9 và lề đường ~ 6,3 giây – nevermind

Trả lời

5

Tôi nhận được loại kết quả này với điểm chuẩn, truy xuất dữ liệu từ google.

Warming up -------------------------------------- 
      OpenURI  1.000 i/100ms 
      Net::HTTP  1.000 i/100ms 
       curb  1.000 i/100ms 
     rest_client  1.000 i/100ms 
Calculating ------------------------------------- 
      OpenURI  10.258 (± 9.7%) i/s - 199.000 in 20.003783s 
      Net::HTTP  18.272 (± 5.5%) i/s - 362.000 in 20.047560s 
       curb  17.873 (± 5.6%) i/s - 356.000 in 20.019155s 
     rest_client  13.688 (±21.9%) i/s - 258.000 in 20.9s 

Comparison: 
      Net::HTTP:  18.3 i/s 
       curb:  17.9 i/s - same-ish: difference falls within error 
     rest_client:  13.7 i/s - 1.33x slower 
      OpenURI:  10.3 i/s - 1.78x slower 

Và đây là một mã nguồn của bài kiểm tra

require 'benchmark/ips' 
require 'open-uri' 
require 'net/http' 
require 'curb' 
require 'rest-client' 

google_uri = URI('http://www.google.com/') 
google_uri_string = google_uri.to_s 

Benchmark.ips do |x| 
    x.config(time: 20, warmup: 10) 
    x.report('OpenURI') { open(google_uri_string) } 
    x.report('Net::HTTP') { Net::HTTP.get(google_uri) } 
    x.report('curb') { Curl.get(google_uri_string) } 
    x.report('rest_client') { RestClient.get(google_uri_string) } 
    x.compare! 
end 

GHI CHÚ:

Đừng quên để cài đặt đá quý trước khi chạy thử nghiệm

gem install curb rest-client benchmark-ips 

Để có được kết quả chính xác hơn chạy trong môi trường mạng ổn định, như sản xuất se rvers

+1

Tôi nhớ lề đường là nhanh nhất quá từ các bài kiểm tra của tôi – nevermind

+2

Nếu bạn vẫn còn có nó, bạn có thể thêm mã của mình ở đây để người khác có thể tự làm điều này không? – kbrock