웹개발 - PHP 프로그램 개발 강의
글수 707
(뭐..여러가지 이유가 있겠지만..php 파일로 싸이트를 구성하였을때의 예 입니다.)
주석을 포함해서 파일의 크기가 크면 클수록 속도가 늦어지더라고요.
아무내용도 없이 주석으로만 10kb 짜리 일때 초당 500개 정도 처리되고
주석으로만 300kb 일때, 초당 10개 정도가 처리되더군요.
결론은 PHP 의 속도향상을 위해서는 파일의 크기 자체를 최소한으로 작게 해야하고
클래스 파일등도 잘게 나눠서, 필요한 클래스만 포함을 하던지..
무슨 방법을 써야 될듯 합니다.
이외에 다른 속도향상 방법을 알고 계신분.. 리플좀 달아주세요 ^^
(요즘 속도 향상때문에 골치가 아푸네요 ^^)
주석과 관련한 재미있는 테스트를 한번 해보시죠.
가령 같은 내용의 커다란 주석을..
/*
주석
주석
....
주석
주석 */
와 같은 형태로 했을때와
// 주석
//주석
....
//주석
//주석
와 같은 형태로 했을경우에
전자는 주석의 크기가 커지는 만큼 속도가 느려집니다..
한마디로 파일안의 주석은 왠만하면 삭제 하시는게 좋을듯합니다..
제로보드의 경우 초보들이 알게 쉽게 주석을 많이 넣어두었는데요...
주석은 삭제하고 서버로 올리는게 좋을듯 하구요..
그럼 파일 자체의 크기를 주릴수 있으니.. 클라이언트의 컴퓨터가 빨리 화면을 띄우겠죠.^^
* DeX™님에 의해서 게시물 이동되었습니다 (2004-06-28 19:02)
주석을 포함해서 파일의 크기가 크면 클수록 속도가 늦어지더라고요.
아무내용도 없이 주석으로만 10kb 짜리 일때 초당 500개 정도 처리되고
주석으로만 300kb 일때, 초당 10개 정도가 처리되더군요.
결론은 PHP 의 속도향상을 위해서는 파일의 크기 자체를 최소한으로 작게 해야하고
클래스 파일등도 잘게 나눠서, 필요한 클래스만 포함을 하던지..
무슨 방법을 써야 될듯 합니다.
이외에 다른 속도향상 방법을 알고 계신분.. 리플좀 달아주세요 ^^
(요즘 속도 향상때문에 골치가 아푸네요 ^^)
주석과 관련한 재미있는 테스트를 한번 해보시죠.
가령 같은 내용의 커다란 주석을..
/*
주석
주석
....
주석
주석 */
와 같은 형태로 했을때와
// 주석
//주석
....
//주석
//주석
와 같은 형태로 했을경우에
전자는 주석의 크기가 커지는 만큼 속도가 느려집니다..
한마디로 파일안의 주석은 왠만하면 삭제 하시는게 좋을듯합니다..
제로보드의 경우 초보들이 알게 쉽게 주석을 많이 넣어두었는데요...
주석은 삭제하고 서버로 올리는게 좋을듯 하구요..
그럼 파일 자체의 크기를 주릴수 있으니.. 클라이언트의 컴퓨터가 빨리 화면을 띄우겠죠.^^
* DeX™님에 의해서 게시물 이동되었습니다 (2004-06-28 19:02)
2004.06.28 13:29:46 (*.248.223.65)
그래서..
들여쓰기시 space문자 노~
주석안쓰기
최대한 간결하게 쓰기
쓸데없는 공백,줄바꿈 하지 않기
인터프린팅타임이 줄어들수록 체감속도는 빠르다..-_-
들여쓰기시 space문자 노~
주석안쓰기
최대한 간결하게 쓰기
쓸데없는 공백,줄바꿈 하지 않기
인터프린팅타임이 줄어들수록 체감속도는 빠르다..-_-
2004.06.28 19:16:09 (*.91.122.173)
문제는 주석을 안달면 제작 6개월 이후 소스를 다시 봤을때 도데체 이게 뭔지 모른다는거죠.
차라리 빠르게 하려면 for 문이나 while 문보다는 foreach 문을 쓰고, ereg 대신에 preg 계열 함수를 써서 속도를 향상시키는것도 도움이 되겠지요.
차라리 빠르게 하려면 for 문이나 while 문보다는 foreach 문을 쓰고, ereg 대신에 preg 계열 함수를 써서 속도를 향상시키는것도 도움이 되겠지요.
2004.06.29 01:53:14 (*.158.70.224)
PHP 작동방식에서 주석은 스킵됩니다. 속도에 그다지 영향을 주지 않는다고 생각하시면 됩니다.
대신에 주석이 주는 영향은 source를 parser에 주기 위해 heap 메모리에 올릴때 그만큼을 먹거나 올리는 과정에서 skip 하게 됩니다.
또 include와 require를 적절히 사용해야 합니다. include는 실행시 동적으로 불러지지만 require는 정적으로 parsing 과정에서 이루어집니다.
또 클래스를 너무 과다하게 나누면 과다한 include나 require가 발생합니다. 이건 File I/O의 부담을 가중 시키는 것으로 CPU와 메모리 둘다 무리를 주게 됩니다.
위에 좋은 말씀 처럼 루프문이 가장 큰 영향을 준다고 생각하시면 되고, 루프도 가장 속도에 영향을 미치는 것이 배열에 관한 부분이며 배열이 다중배열일 경우 설계를 잘 하셔야 하고, 루프시 빠른 루프를 사용해야 합니다. while(list()=each()) 구문 보다는 foreach()를 또는 array_keys()나 array_values() 함수의 조합으로 또는 for문으로 여러가지 상황에 맞는 접목이 중요하며 이전버젼의 PHP를 지원하기위해 감수해야할 속도의 낭비는 어느정도 감수해야 할 때가 있습니다.
PHP 메뉴얼의 마지막 부분을 참조하면 약간의 팁이 있을 수 있습니다.
PHP Code의 최적화는 Zend 사이트에서 이미 2000년도에 테스트를 여러가지 한 자료가 많은 것으로 알고 있습니다.
또 SQL의 쿼리의 최적화도 중요합니다. 대부분의 서버 자원의 메모리를 먹는 것이 SQL이기 때문이죠.
대신에 주석이 주는 영향은 source를 parser에 주기 위해 heap 메모리에 올릴때 그만큼을 먹거나 올리는 과정에서 skip 하게 됩니다.
또 include와 require를 적절히 사용해야 합니다. include는 실행시 동적으로 불러지지만 require는 정적으로 parsing 과정에서 이루어집니다.
또 클래스를 너무 과다하게 나누면 과다한 include나 require가 발생합니다. 이건 File I/O의 부담을 가중 시키는 것으로 CPU와 메모리 둘다 무리를 주게 됩니다.
위에 좋은 말씀 처럼 루프문이 가장 큰 영향을 준다고 생각하시면 되고, 루프도 가장 속도에 영향을 미치는 것이 배열에 관한 부분이며 배열이 다중배열일 경우 설계를 잘 하셔야 하고, 루프시 빠른 루프를 사용해야 합니다. while(list()=each()) 구문 보다는 foreach()를 또는 array_keys()나 array_values() 함수의 조합으로 또는 for문으로 여러가지 상황에 맞는 접목이 중요하며 이전버젼의 PHP를 지원하기위해 감수해야할 속도의 낭비는 어느정도 감수해야 할 때가 있습니다.
PHP 메뉴얼의 마지막 부분을 참조하면 약간의 팁이 있을 수 있습니다.
PHP Code의 최적화는 Zend 사이트에서 이미 2000년도에 테스트를 여러가지 한 자료가 많은 것으로 알고 있습니다.
또 SQL의 쿼리의 최적화도 중요합니다. 대부분의 서버 자원의 메모리를 먹는 것이 SQL이기 때문이죠.
2004.06.29 02:00:50 (*.158.70.224)
아 또 한가지 File 의 Lock 이나 SQL Table의 Lock을 이용했을때 서버 프로세스의 상호배제 때문에 DB 자원의 무결성을 지키기 위해 Syncronize 하게되면 이때 서버의 자원이 낭비되고 CPU도 점유 상태가 되면서 서버에 악영향을 미칠 수 있습니다. Lock 때문에 낭패를 본적이 있어서;;
2004.06.29 09:22:49 (*.233.65.164)
아~.. 이건 또 무슨 말씀이란 말인가;;
써니루루님 말씀은 마치 딴 세계 사람의 이야기를 듣는것같고 -_-;;
PHP의 길은 이렇게 멀고도 험한것인가... 를 실감하게 되는 왕초보는.. 멍한.. 그 자체;;
써니루루님 말씀은 마치 딴 세계 사람의 이야기를 듣는것같고 -_-;;
PHP의 길은 이렇게 멀고도 험한것인가... 를 실감하게 되는 왕초보는.. 멍한.. 그 자체;;
2004.06.29 23:45:38 (*.172.215.16)
그리고 서버의 CPU 종류에 따라, 미미하지만 차이가 있다고 합니다.
RISC 방식의 서버(PowerPC칩셋)와 CISC방식(대부분의 인텔 제품)은 서로 코드가 같아도 속도가 다르다고 하네요.
RISC 방식의 서버(PowerPC칩셋)와 CISC방식(대부분의 인텔 제품)은 서로 코드가 같아도 속도가 다르다고 하네요.
2004.06.30 12:57:50 (*.119.241.70)
주석에 관한 간단한 실험입니다;
http://www.nzeo.com/bbs/zboard.php?id=p_qa_new&no=13991
인용)
제가 아이쿠님 말씀대로 아주 간단한 프로그램에 주석을 1.1메가 정도 달아서 테스트해 보았습니다.
주석 달았을 때 0.000095초, 그렇지 않은 경우 0.000084초 정도였습니다.
0.000011초 가량 차이가 나더군요; 무시하시고 쓰시면 됩니다^^;
http://www.nzeo.com/bbs/zboard.php?id=p_qa_new&no=13991
인용)
제가 아이쿠님 말씀대로 아주 간단한 프로그램에 주석을 1.1메가 정도 달아서 테스트해 보았습니다.
주석 달았을 때 0.000095초, 그렇지 않은 경우 0.000084초 정도였습니다.
0.000011초 가량 차이가 나더군요; 무시하시고 쓰시면 됩니다^^;
2004.06.30 13:05:52 (*.100.62.14)
html 주석은 서버와 클라이언트 둘다 큰 곤욕입니다. 클라이언트(웹브라우저)는 주석도 파싱하기 때문이죠.... 제로보드 라이센스를 표기하지 않으면 0.1초 이상 빨라질지도...
2004.07.03 13:04:23 (*.104.211.31)
최대한 "대신 '를 쓰고있죠.
고급언어인 php로 RISC나 CISC에 맞게 설계한다는건 무리죠.
어셈블리라면 모를까..
for은 while의 변형으로 볼수있고,
goto문이있으면 if와의 조합으로 루프문을 만들수도 있는... (딴얘기;)
출력을 빠르게 하는건 echo로 따옴표로 둘러서 하는것보다,
변수에 저장해서 한번에 출력하는게 빠르다고 들은...
고급언어인 php로 RISC나 CISC에 맞게 설계한다는건 무리죠.
어셈블리라면 모를까..
for은 while의 변형으로 볼수있고,
goto문이있으면 if와의 조합으로 루프문을 만들수도 있는... (딴얘기;)
출력을 빠르게 하는건 echo로 따옴표로 둘러서 하는것보다,
변수에 저장해서 한번에 출력하는게 빠르다고 들은...
2004.07.05 13:44:51 (*.153.166.115)
주석이 여러 개로 나뉘어 있으면 파싱할 때 별도의 토큰으로 파싱해 버리기 때문에 약간 차이가 더 날 수 있는 것은 맞습니다...만 별 차이는 주지 않을 것 같군요.
당연한 말이지만 최적화를 할 때에는 가장 부하가 많이 먹는(php의 경우 SQL 같은 것이 그 중 하나죠) 부분만 최적화하는 게 더 낫습니다.
(예를 들어서 전체 수행 시간의 35%를 잡아 먹는 걸 50% 최적화한다면 전체 수행 시간이 17.5% 줄어 들겠지만, 5%를 차지하는 부분을 90% 차지하면 시간이 4.5% 절약될 뿐이죠 :)
따라서 프로그램을 작성할 때는 최적화보다 소스의 가독성을 높게 하고 유지 보수가 편리한 형태로 만드는 쪽이 더 좋습니다. 최적화 한다고 소스를 읽기 어려울 정도로 한다고 해서 그 효과가 동일한 게 아니니깐요. :p (이른바 "선택적인 최적화"라 하겠습니다.)
당연한 말이지만 최적화를 할 때에는 가장 부하가 많이 먹는(php의 경우 SQL 같은 것이 그 중 하나죠) 부분만 최적화하는 게 더 낫습니다.
(예를 들어서 전체 수행 시간의 35%를 잡아 먹는 걸 50% 최적화한다면 전체 수행 시간이 17.5% 줄어 들겠지만, 5%를 차지하는 부분을 90% 차지하면 시간이 4.5% 절약될 뿐이죠 :)
따라서 프로그램을 작성할 때는 최적화보다 소스의 가독성을 높게 하고 유지 보수가 편리한 형태로 만드는 쪽이 더 좋습니다. 최적화 한다고 소스를 읽기 어려울 정도로 한다고 해서 그 효과가 동일한 게 아니니깐요. :p (이른바 "선택적인 최적화"라 하겠습니다.)
2004.07.05 13:45:54 (*.153.166.115)
물론 전체적으로 모든 부분이 빠르고 인터프리팅 시간의 영향이 상당히 크다 싶으면야 눈물을 머금고 소스를 통째로 최적화해야 겠습니다만 T_T



html 코드 ... <? PHP코드 조금 ?> html 코드..
식으로 되어 있다면, PHP는 <? ?> 태그 안의 내용만 파싱하므로,
fopen으로 여는것과 별반 차이가 안나는 속도로 처리하지만..
<? echo "html코드전체"; ?> 로 처리하면 PHP가 이를 전부 파싱하므로
속도가 당연히 느려지겠더군요