2013-01-20 4 views
0

foreach 루프 내에서 컬을 사용하면 성능이 떨어지거나 느려 집니까?foreach 루프 최적화 내에서 컬 사용?

입력란 자동 완성 기능을 사용할 계획이며 입력 된 검색어가 API 호출로 전송됩니다. 다음 그래서 나는 이름을 입력 할 때마다, 그것은 http://api.linke1.com/names에서 ID를 검색 foreach 문으로 이동합니다 : (http://api.linke1.com/names 예)

foreach($json as j){ 

    $id = $j->id; //from http://api.linke1.com/names 

    $url = "https://api.site/{$id}/photos"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $output = curl_exec($ch); 
    curl_close($ch);  

    $jsonDecode = json_decode($output); 
    $results = $jsonDecode->results; 
    foreach($results as $result) 
    { 
      $photoURL= $result->photo->url; //from https://api.site/{$id}/photos 
    } 
} 

나는 특정 링크에서 ID를 얻고있다 그것은 다른 링크에서 사진 URL을 찾습니다. 배열의 목록을 출력하고 싶었으므로 결과적으로 이름, 사진 등의 정보를 출력하는 데이터 목록을 갖게됩니다 ...

입력시 각 문자가 입력되기 때문에 속도가 크게 느려지습니까? 필드는이 foreach 루프를 통해 실행됩니다. 더 쉬운 방법이 있을까요?

감사합니다.

+0

단일 요청으로이 모든 정보를 검색 할 수있는 방법은 없습니까? 일반적으로 비싼 작업을 수행하는 것은 (인터넷을 통해 데이터를 요청하는 것은 분명히 값 비싼 작업 임) 루프 내부는 나쁜 생각입니다. – AgentConundrum

+0

질문의 루프가 불필요 해 보입니다. 바깥 쪽 foreach가 없으므로 최적화하는 것이 가장 좋습니다. 내부 foreach도 비린내가되고있다. 아마도 첫 번째 반복에서 그것을 깨기를 원할 것이다. 그 외에는 가상의 문제가 아닌 구체적인 것에 대해서만 질문하십시오. 예, 그것은 잘못 될 수 있습니다. 그러나 지금 보이는 것처럼 작동하지 않습니다. 먼저 작동시키고 최적화하십시오. – hakre

+0

당신은 무엇을 생각해 냈습니까? – Muqito

답변

1

루프 전에 변경되지 않은 컬 및 사물을 초기화하고 나중에 닫으십시오.

이렇게하면 속도가 조금 빨라질 것입니다.

및 여러 개의 URL을 병렬로 가져올 수있는 curl_multi_ *를 사용할 수 있습니다.

http://se2.php.net/manual/en/ref.curl.php

+0

아니면 간단히 GET 요청을하기 때문에'file_get_contents() '를 사용할 수 있습니다. – xbonez

+1

@xbonez 컬 요청이 빠릅니다. – Muqito

+0

흠, 정말? 그 사실을 몰랐습니다. – xbonez