You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
2.2 KiB

# encoding: utf-8
# frozen_string_literal: true
require 'ethon'
require 'open-uri'
require 'patron'
require 'curb'
require 'net/http'
require 'cgi'
require 'benchmark/ips'
require_relative '../spec/support/server'
require_relative '../spec/support/localhost_server'
LocalhostServer.new(TESTSERVER.new, 3000)
LocalhostServer.new(TESTSERVER.new, 3001)
LocalhostServer.new(TESTSERVER.new, 3002)
url = 'http://localhost:3000/'.freeze
uri = URI.parse('http://localhost:3000/').freeze
ethon = Ethon::Easy.new(url: url)
patron = Patron::Session.new
patron_url = Patron::Session.new(base_url: url)
curb = Curl::Easy.new(url)
puts '[Creation]'
Benchmark.ips do |x|
x.report('String.new') { '' }
x.report('Easy.new') { Ethon::Easy.new }
end
puts '[Escape]'
Benchmark.ips do |x|
x.report('CGI.escape') { CGI.escape("まつもと") }
x.report('Easy.escape') { ethon.escape("まつもと") }
end
puts '[Requests]'
Benchmark.ips do |x|
x.report('net/http') { Net::HTTP.get_response(uri) }
x.report('open-uri') { open url }
x.report('patron') do
patron.base_url = url
patron.get('/')
end
x.report('patron reuse') { patron_url.get('/') }
x.report('curb') do
curb.url = url
curb.perform
end
x.report('curb reuse') { curb.perform }
x.report('Easy.perform') do
ethon.url = url
ethon.perform
end
x.report('Easy.perform reuse') { ethon.perform }
end
puts "[ 4 delayed Requests ]"
Benchmark.ips do |x|
x.report('net/http') do
3.times do |i|
uri = URI.parse("http://localhost:300#{i}/?delay=1")
Net::HTTP.get_response(uri)
end
end
x.report("open-uri") do
3.times do |i|
open("http://localhost:300#{i}/?delay=1")
end
end
x.report("patron") do
sess = Patron::Session.new
3.times do |i|
sess.base_url = "http://localhost:300#{i}/?delay=1"
sess.get("/")
end
end
x.report("Easy.perform") do
easy = Ethon::Easy.new
3.times do |i|
easy.url = "http://localhost:300#{i}/?delay=1"
easy.perform
end
end
x.report("Multi.perform") do
multi = Ethon::Multi.new
3.times do |i|
easy = Ethon::Easy.new
easy.url = "http://localhost:300#{i}/?delay=1"
multi.add(easy)
end
multi.perform
end
end