2014-09-03 5 views
1

그래서 나는 많은 데이터베이스와 워드 프레스를 통해 리더 보드를 만들었습니다. 데이터 쿼리, 계산 및 업데이트가 많은 것처럼 보이며 리더 보드 디스플레이 페이지가 실제로 느려집니다. 그래서 쿼리 한 마지막 시간 이후로 한 시간이 지났을 경우에만 쿼리 및 계산 얻으려고 노력하고있어. 이것은 지금까지 내 코드입니다 : 나는 또한 "글로벌"대신 "정적"시도했습니다마지막 실행 후 1 시간이 지난 경우에만 PHP 코드를 실행하십시오.

<?php 
    static $lastQueryTime; 

    if(!isset($lastQueryTime) || ($now > $lastQueryTime + (60*60))){ 
     $lastQueryTime = $now; 

     //PHP to run...Querying, calculating, updating 
    } 
?> 

하지만 둘은 쿼리가 항상 페이지로드에서 발생 일 것 같았다.

+0

PHP 외부에 값을 저장해야합니다 (런타임이 실행 됨). 가장 가능성있는 옵션은 SQL 데이터베이스 (MySQL)이며, 가장 빠른 옵션은 캐시 서버 (Redis)이고 설정하는 가장 빠른 방법은 정적 파일 (사용자가 직접 읽고 쓸 수 있음)입니다. – Sam

+0

'global'도'static'도 여러분을 여기서 잘 할 수 없습니다 - 왜냐하면 PHP 스크립트는 현재 요청에 대답 할 필요가있을 때만 "살아"있기 때문에 ... 그 일이 끝나면 모든 변수가 사라집니다. 스크립트의 다음 "인스턴스"가 파일, 데이터베이스 등에서 다시 읽을 수있는 값을 저장할 필요가 있습니다. – CBroe

+4

간단히 'cron'으로 스크립트를 실행 하는게 어떨까요? – mario

답변

2

PHP 코드는 가변적으로 사용하지 않는 한 상태 변수입니다. static 변수는 여러 요청에서 생존하지 못하며, 더 정확하게는 수동으로 지속하지 않는 한 아무 것도 않습니다.

디스크가 작동하려면 데이터베이스에 $lastQueryTime을 저장해야합니다.

2

staticglobal이 별도의 인스턴스에서 데이터를 지속하는 메커니즘이 아닙니다.. 그들은 단일 스크립트 실행 내에서만 데이터를 보유하고 모든 것이 사라졌습니다. 데이터베이스 외부에 데이터를 저장해야합니다.

0

$lastQueryTime을 스크립트의 끝에있는 파일에 쓰고 스크립트의 맨 위에 해당 파일을 포함시킵니다. 그런 다음 $lastQueryTime이 한 시간 전에 있는지 테스트하십시오. 그런 경우 스크립트로 진행하고 새 시간을 파일로 저장하십시오. 그렇지 않으면 아무것도하지 마십시오.