commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: [httpclient_common]_why httpclient's speed is the same with JDK httpurlconnection
Date Wed, 07 Feb 2007 14:00:44 GMT
On Wed, 2007-02-07 at 09:06 +0800, allen huang wrote:
> Hi,
> I have a problem when trying to comparing the speed between JDK
> HttpURLConnection and HttpClient.
> 
> Now I have two methods, one is performed with jdk(1.5) httpurlConnection,
> the other is performed with httpClient( 3.0.1). Both of them try to download
> the same webpage(http://jakarta.apache.org).After<http://jakarta.apache.org%29.After>testing,
> the average time which performed JDK httpurlconnection  is  200ms,
> so as the one which performed httpclient.That means their speeds are almost
> the same.
> 
> So, since HttpClient use persistence connection default but JDK do not, why
> httpClient's speed could not be more fast than JDK?
> 
> Another problem is, is it normal to httpclient to use 200ms to download a
> page like http://jakarta.apache.org? I mean, when using persistence
> connection, maybe this could not be accepted.
> 
> Any help will be great appreciated
> 

Allen

Essentially you are measuring the speed of JIT compiler, DNS hostname
lookup, and that of the link to your ISP. I suspect this measurement
does reflect the performance of the underlying HTTP engines at all. 

Please consider running your tests against an HTTP server on the local
network, making a significant number of repetitions to eliminate data
distortions due to JVM startup, JIT compilation and other factors

You might want to use this benchmarking tool to test performance of
HttpClient [1]. The HttpClient benchmark tool supports a subset of
commands of the Apache Benchmark (ab) and produces similar output.

Hope this helps

Oleg

[1]
http://svn.apache.org/repos/asf/jakarta/commons/proper/httpclient/trunk/src/contrib/org/apache/commons/httpclient/contrib/benchmark/

> ----------------------------------------Source to httpclient
> method-------------------------------------
>     public void testGetMethod(){
> 
>         MultiThreadedHttpConnectionManager manager=new
> MultiThreadedHttpConnectionManager();
>         manager.getParams().setConnectionTimeout(3000);
>         manager.getParams ().setDefaultMaxConnectionsPerHost(1);
> //        manager.getParams().setMaxTotalConnections(30);
>         HttpClient httpClient = new HttpClient(manager);
>         // Set the default host/protocol for the methods to connect to.
>         // This value will only be used if the methods are not given an
> absolute URI
> //        httpClient.getHostConfiguration().setProxy("192.168.0.10",80);
> //        httpClient.getHostConfiguration().setHost("jakarta.apache.org",
> 80, "http");
>         GetMethod method = new GetMethod(" http://jakarta.apache.org");
>         for (int i=0;i<10;i++){
>         try {
> 
> //            System.out.println(" - about to get something from " +
> method.getURI());
>             // execute the method
>             long start=System.currentTimeMillis();
>             httpClient.executeMethod(method);
> 
> //            System.out.println(" - get executed");
>             // get the response body as an array of bytes
>             byte[] bytes = method.getResponseBody();
>             System.out.println("cost time is "+(System.currentTimeMillis
> ()-start));
> 
> //            System.out.println(new String(bytes));
> //            System.out.println(" - " + bytes.length + " bytes read");
> 
>         } catch (Exception e) {
>             System.out.println(" - error: " + e);
>         } finally {
>             // always release the connection after we're done
>             method.releaseConnection();
> //            System.out.println(" - connection released");
>         }
>         }
>     }
> ------------------------------------------source code to JDK
> httpurlconnection------------------------------------------------
>     public void testJDKHttpURlconnection() {
> 
>         for (int i = 0; i < 10; i++) {
>             try {
>                 long start = System.currentTimeMillis();
>                 URL requestedURL = new URL("http://jakarta.apache.org");
>                 HttpURLConnection conn = (HttpURLConnection) requestedURL
>                         .openConnection();
> 
>                 conn.setRequestProperty("User-Agent",
>                         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0
> )");
> 
>                 conn.setUseCaches(false);
> 
>                 conn.connect();
> 
>                 BufferedInputStream remoteBIS = new BufferedInputStream(conn
>                         .getInputStream());
>                 ByteArrayOutputStream baos = new
> ByteArrayOutputStream(10240);
>                 byte[] buf = new byte[1024];
>                 int bytesRead = 0;
>                 while (bytesRead >= 0) {
>                     baos.write(buf, 0, bytesRead);
>                     bytesRead = remoteBIS.read(buf);
>                 }
>                 byte[] content = baos.toByteArray();
>                 System.out.println("cost time is "
>                         + (System.currentTimeMillis() - start));
> 
>             } catch (Exception e) {
>             }
>         }
>     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message