2010-12-17 3 views
0

나는 스크립트의 성능을 최적화하고 무거운 초기화 히트를 피하기 위해 서로 다른 PHP 스크립트 실행간에 '정적'객체를 만들고 싶습니다. 이렇게하는 방법이 있습니까?스크립트 실행 사이의 PHP 개체 remanent

+0

캐시를 사용하지 않는 이유는 무엇입니까? ACP가 유용 할 수 있습니다. – joksnet

+0

ACP ??? 도와주세요. – millebii

+0

https://encrypted.google.com/search?hl=ko&q=php+apc 첫 번째 조회수 (또는 위키피디아의 세 번째 조회수) –

답변

2

당신은 사용자의 세션에 넣어 수 있습니다. 하지만 클래스가 session_start() 전에 선언되었는지 확인하십시오.

require 'heavy_class.php'; 
session_start(); 

$_SESSION['heavy'] = new HeavyClass; 
+0

좋은 찾고 있습니다. 나는이 방법을 시도하고 영향을 볼 때 답을 구할 것이다. – millebii

+0

잘 작동하지만, 실제로는 약간 더 나쁩니다. 내 init 시간이 serialize/deserialize보다 낮습니다. – millebii

1

해당 개체를 직렬화하여 세션에 저장하십시오. 다시 사용하려면 사용자가 직렬화 해제하십시오.

2

개체를 serialize하고 로컬 파일이나 데이터베이스에 유지할 수 있습니다. 이것은 PHP 함수를 사용하는 것이 가장 좋습니다 serialize()

그런 다음 unserialize()을 사용하여 개체를 복원합니다.

개체의 클래스가 실행 스크립트에서 사용 가능해야하는 몇 가지 "문제"가 있습니다.

직렬화 및 직렬화를 해제 할 때 각각 __sleep()__wakeup의 직렬화되는 개체에 대한 마법 메서드를 호출합니다. 모든 데이터베이스 초기화는 이러한 메소드에서 수행되어야합니다. PHP는 워드 프로세서에

링크 : http://php.net/manual/en/function.serialize.php

+0

+1 그래서 모든 세션 솔루션을 한꺼번에 처리 할 수 ​​있습니다. 세션은 하나의 오브젝트가 아닌 적은 오브젝트를 생성합니다. 목표가 하나의 단일 객체를 갖는 것이라면 다른 것을해야합니다. 세션은 사용자에 따라 다르므로 – DampeS8N

1

세션에 고정하면 자동으로 serialize됩니다. __wakeup 및 __sleep 마법 메서드를 사용하여 데이터베이스 연결을 처리 할 수 ​​있지만 디스크 히트를 피할 수 있습니다.