2011-10-28 2 views
0

콘텐츠를 가져 오는 많은 원격 HTTP 호출을 수행하는 lib를 작성해야합니다. 내가 설명한대로 할 수있는 here,하지만 거기에 더 나은 방법 (성능의 의미에서) 어떻게 그것을 할 수 있습니까? 예를 들어 설명한대로 필자는 항상 URL 개체를 만듭니다.이 개체는 구문 분석되는 등의 오버 헤드가 있습니다. 기본 URL은 항상 동일하며 단일 매개 변수는 항상 다릅니다. 예 :더 빠르고 더 나은 방법 여러 원격 콘텐츠 가져 오기를 수행하는 방법

http://www.example.com/?param=value1 
http://www.example.com/?param=value2 
http://www.example.com/?param=value3 
and so on... 

더 빠르고 더 나은 방법은 무엇입니까?

+1

우주에서 가장 빠른 인터넷 연결을 사용하고있는 경우가 아니라면 URL 구문 분석은 서버의 응답을 기다리는 것과 비교할 수 없습니다. –

+0

@Brendan Long : 좋은 지적이지만, 수만번의 호출을 할 때 - 필자는 필자가 정말로 필요로하지 않는 것들에 어떤 컴퓨팅 성능을 저장할 수있다 ... – Laimoncijus

+0

URL 파싱은 실제로 사소한 일이다. 가장 효과적인 방법은 가능한 한 적은 수의 http 호출을 만드는 방법을 찾는 것입니다. –

답변

1

HttpClient and normal form semantics; 매개 변수 값을 덮어 쓸 수 있습니다.

OTOH는 네트워크 속도와 비교할 때 URL 구문 분석 시간이 문제가 될 것이라고 생각합니다. 그 외에는 여러 개의 요청 스레드를 생성 할 수 있습니다.

+0

좋은 지적. 그것은 파싱을 약간 줄일 수 있습니다. – Thom

+0

제 아이디어는 (실제로 스레드를 사용할 수 있기 때문에) 시간을 절약하는 것이 아니라 일부 컴퓨팅 성능을 저장하고 URL 구문 분석을 건너 뛰고 유효하다는 것을 알았고 다른 모든 매개 변수를 사용하면 괜찮을 것입니다. 제 경우에는 그렇지 않습니다. 모든 호출에 대해 유효성 검사/구문 분석이 필요합니다. – Laimoncijus

+1

@Laimoncijus 이해하지만 근본적으로 아무 것도 저장하지 않고 있습니다. –

3

각 URL이 다른 리소스를 반환 할 가능성이 있다고 가정하면 그게 전부입니다. 네트워크 문제를 차단하지 않도록 각 URL을 자체 스레드에 넣을 것입니다.

하지만 너무 많은 스레드를 만들지 않도록하십시오. 말하자면 10 개 이상이라면 URL을 대기열에 넣고 완료 ​​될 때 각 스레드가 대기열에있는 다음 스레드를 처리하도록하여 스레드로 시스템을 껌 씹지 말아야합니다.

+0

또는 더 빨리 [비동기 요청] (http://stackoverflow.com/questions/1014528/asynchronous-http-client-for-java)을 사용하는 것이 일반적이지만 더 어렵습니다. –

+0

예, 저는 게으르다. – Thom

관련 문제