2013-02-19 3 views
0

동적 페이지는 이미 만들 수 있지만 제대로 작동하지만 방문 페이지가 매우 느리게로드됩니다.PHP로 동적으로 신속하게 페이지 생성

정말 도움이 필요합니다. 아래는 내 사이트의 기능입니다.

의이 http://example.com/search.php에 대한 링크와 함께 시작하자 :

<?php 

session_start(); 

//(pretend there is code here that gets, decodes, and displays data from an api) 

$title = $titleFromApi; 
$a = $dataFromApi; 


$_SESSION['storeTitle'] = $title;  // stores 'title' in a session variable  
$_SESSION['store_a'] = $a;   // stores 'a' in a session variable 

echo '<a href="http://example.com/'. $a .'/' . $title .'> ' . $title . '</a>'; 

// the line above is a clickable link that will take them to the landing page 


?> 

을 지금 여기에 방문 페이지 (http://example.com/$a/$title)입니다 : 난 그냥 오늘 세션에 대해 알게

<?php 

session_start(); 


$al = $_SESSION['store_a'];  // stores session variable in new variable 'al' 

$getter = 'http://api.somewebsite.com/dev/' . $al . '/get_these_variables'; 

// the line above gets data from an api using variable 'al' 

// (pretend that there is code here that decodes the data) 

// the code below displays the data retrieved from the api 

foreach($data as $entry){ 

echo ' 

<div> 
    ' . $entry['decoded_data_1'] 
    . ' 
</div> 


<div> 
    ' . $entry['decoded_data_2']   // and so on 
    . ' 
</div> 

';          // ends echo 

} 

?> 

가 (나는 빨리 일을 할 것이라고 생각); 이전에 search.php에서 검색 주소창으로 데이터를 보낸 다음 방문 페이지에서 변수를 읽으려고 읽었습니다. (필자는 PHP와 개발에 대해 처음 접했습니다.) 방문 페이지의 페이지로드 속도가 변경되지 않았습니다.

+6

원격 사이트로 전화를 거는 중입니다. 이는 항상 원격 사이트가 응답하는 데 걸리는 시간만큼 페이지가 표시되는 것을 의미합니다. – GordonM

+0

search.php 페이지가 mysite.com과 다른 도메인에 있습니까? –

+0

코드에서 두 개 이상의 점 사이의 타이밍을 측정하려면'microtime (true) '을 사용하십시오. @Gordon이 말했듯이 병목 현상을 식별하는 데 도움이 될 것입니다. 아마도 API 호출 일 것입니다. 아마 API가 느리거나 느린 네트워크에 있습니까? – halfer

답변

0

코멘트에서 언급했듯이, 현재 모양에서 스크립트는 쿼리 된 API의 응답 시간보다 빨리 갈 수 없습니다.

API에 대해 아무 말도하지 않으므로 해당 영역의 속도를 보장 할 수 없습니다. 그러나 해당 API가 일관되게 동일한 쿼리에 대해 동일한 결과를 반환하면 결과 캐시를 구현하여 문제를 완화 할 수 있습니다.

기본적으로 매개 변수로 인덱싱 된 쿼리 결과를 영구 배열에 저장하고 쿼리가 수행 될 때마다 결과가 이미 존재하지 않는지 확인해야합니다. 배열에 세션 값을 database으로 만들거나 메모리 기반 캐시 메커니즘 (예 : memcache)으로 만들도록 선택할 수 있습니다.

각 방법은 장점과 단점이 있고, 다른 걸쳐 하나 개의 솔루션을 선택하는 것은 또한 API에 의존됩니다

  • 크게 그 효과를 줄일 수 있지만, 수도 것이다 기반 캐시가 클라이언트에 따라 제한됩니다 세션,
  • db 기반은 API 서버보다 액세스가 빠르면 다소 효과적 일 수 있습니다. 예 : ,

당신은 또한 DB 및 memcache를 결합 할 수있다, 충분히 큰 대역폭을 가진 로컬 DB,

  • 은 memcache에 옵션은 가장 빠른해야하지만, 서비스를 다시 시작해야하는 경우 캐시 데이터가 손실됩니다 전자의 지속성과 함께 나중에의 속도를 얻을 수 있습니다.

    이것은 모두 쿼리를 캐시 할 수 있는지, 유효 기간을 다소 예측할 수 있다고 가정합니다. 또한 서버 구성을 일부 제어하거나 위에서 설명한 기능을 이미 지원할 수 있기를 바랍니다.

  • 관련 문제