[SP-pm] downloader survey

Eden Cardim edencardim at gmail.com
Thu Oct 20 13:38:22 PDT 2011


>>>>> "Stanislaw" == Stanislaw Pusep <creaktive em gmail.com> writes:

    Stanislaw> OK, aqui vai o spoiler: estou fazendo benchmark (de
    Stanislaw> overhead) de todos os HTTP agents que conheço. E o LWP
    Stanislaw> está *MUITO* feio na fita:
    Stanislaw> https://metacpan.org/module/AnyEvent::Net::Curl::Queued#OVERHEAD

Não me surpreende que o LWP seja bem ruim num benchmark vs um módulo
escrito especificamente pra esse caso de uso, já que ele é um módulo
projetado para robustez genérica, mas ainda acho que seria mais justo o
benchmark considerar os casos ótimos no mundo real de todos os módulos
analisados.

Por exemplo, todos os módulos estão sendo instanciados dentro do
benchmark, o que na minha opinião desvirtua o teste já que é bem comum
certos módulos sacrificarem inicialização para obter desempenho
subsequente. O tempo de inicialização está sendo contabilizado junto com
a requisição, no mundo real, a otimização que se faria nesse caso teria
apenas uma instância pra todas as requisições, e essa instância se
propagaria pros forks evitando o overhead.

Falando especificamente do LWP, usar
$ua->simple_request(HTTP::Request->new(GET => $url)) deve melhorar
bastante o desempenho. Observa que eu estou sugerindo que se crie uma
instância de requisição a cada iteração já que no mundo real, raramente
vai se fazer download do mesmo recurso, logo, você precisa de uma
instância nova da requisição, mas não do user agent. Outra coisa, o
default do LWP é não usar keep-alive, se você ligar o keep-alive, deve
melhorar bastante também.

-- 
Eden Cardim
Software Engineer
http://bit.ly/edencardim
http://twitter.com/#!/edenc
+55 73 9986-3963


More information about the SaoPaulo-pm mailing list