2012-09-06 6 views
1

약 20 개의 함수가있는 PHP 클래스가 하나씩 있습니다. 이 파일을 포함하면 서버가 모든 클래스와 모든 함수를 메모리에 저장합니까?하나의 파일에 여러 개의 PHP 클래스가 있습니다.

아니면 내가?과 같이

$ajax = new ajax(); 

의 인스턴스 또는 서버는 내가 특별히 전화?

$ajax->make_request(); 

I 기능을 캐시합니다 일단 그것은 단지 클래스와 그 기능을로드합니다 하나의 PHP 파일에 너무 많은 클래스와 함수가 포함되어 있는지, 아니면 작업에 필요한 클래스와 함수 만 포함하는 일부 유형의 로직을 넣어야하는지 궁금합니다.

+0

클래스 및 함수가 수천 줄의 텍스트에 걸쳐있는 경우에도 메모리 영향은 단일 이미지 조작, 잘못 작성된 데이터베이스 쿼리 핸들 또는 다른 많은 것들에 비해 매우 작을 수 있습니다.각 파일에서 적절한 클래스 만 포함하는 번거 로움을 덜어 주시고 잠시 동안 더 많은 메모리를 사용하십시오. 어쨌든'= new .... '로 시작되는 처음 몇 개의 객체와 비교할 때 코드의 메모리는 아마도 창백해질 것이다. – Fluffeh

답변

8

PHP가 어떻게 작동하는지 혼란 스럽습니다.

PHP 파서가 요청할 때마다 요청한 파일을 구문 분석합니다. index.php

index.phpinclude 다른 파일 인 경우 PHP는 해당 파일을 구문 분석합니다.

PHP 파일이 파싱되면 해당 요청 중에 "바이트 코드"(거의 기계어)로 메모리에 저장됩니다.

파일에 몇 개의 함수 나 클래스가 있더라도 관계없이 모든 요청이 메모리에 저장됩니다.

이러한 구문 분석 된 바이트 코드를 요청간에 메모리에 캐시하는 확장이 있지만 PHP에 추가해야합니다.

그러나 클래스에 자동 로딩을 사용하는 것이 메모리 사용 측면에서 더 좋습니다.

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

4

당신이 "자동 로딩"라고해야 할 로직, 이 magicaly 클래스 Ajax을 포함하는 프로세스는 다음과 같습니다

http://php.net/manual/en/language.oop5.autoload.php

PSR 0은 자동 로딩 클래스에 대한 가이드 라인의 좋은 세트입니다 PHP 실행 파일이 new Ajax(); 명령을 실행했을 때.

이렇게하면 메모리에로드 된 쓸모없는 클래스가 존재하지 않습니다.

PSR-0과이 좋은 ClassLoader component을보세요.

(프로젝트에 20 개의 클래스 만있는 경우 오토로더를 추가 할 필요가 없습니다. 이익은 매우 낮을 것입니다).

2

아니요, 서버는 APC 또는 유사한 확장 기능을 사용하여 항목을 캐시하도록 설정하지 않는 한 기본적으로 캐시하지 않습니다. 그래서 코드가 이러한 모든 클래스를 사용한다면 I/O를 줄이기 위해 하나의 파일에 두는 것이 더 나을 것입니다. 그러나 사용하지 않으면 코드를 논리적 클래스로 분리하고 별도의 파일에 넣고 autoloading을 사용하십시오.

관련 문제