PHP Performance
ITWeb/개발일반 2007. 8. 22. 14:46Reference Blog
PHP Performance
- 디렉토리나 파일은 가능한 짧게 유지 하라.
- FollowSymLinks 옵션을 사용하라.
- logging 은 한파일에 하고 분석시 logging 을 중지 하라.
- KeepAliveTimeout 은 가능한 낮게 잡아라.
- static / dynamic request 를 구분하라.
- output buffering 은 브라우저의 rendering 을 빠르게 해준다.
- ob_start()
- output_buffering=on
- SendBufferSize = PageSize ( in apache )
- memory size 가 작은 시스템에서는 사용하지 말라.
This method is much slower than something like this:
ob_start(); for($i = 0; $i <1000; $i++) { echo $i; } ob_end_flush();
-
- 1.36509799957 without ob_start()
- .248747825623 with ob_start()
- bandwidth optimization
- server 자원을 줄인다.
- client page load 를 빠르게 한다.
- network io 를 줄인다.
- compression 은 cpu 의 3-5% 의 load 를 줄인다.
- apache 1 : mod_gzip
- apache 2 : mod_deflate
- Tuning PHP Configuration
- register_globals = Off **
- magic_quotes_gpc = Off
- expose_php = Off
- register_argc_argv = Off
- always_populate_raw_post_data = Off **
- session.use_trans_sid = Off **
- session.auto_start = Off **
- session.gc_divisor = 1000 or 10000
- output_buffering = 4096
- Tuning PHP File Access
- Inefficient Approach : < ? php include "file.php"; ? >
- Performance Friendly Approach : < ? php include "/path/to/file.php"; or include "./file.php"; ? >
- Regular Expression
- Slow
- if (preg_match("!^foo_!i", "FoO_")) { }
- if (preg_match("![a8f9]!", "sometext")) { }
- Faster
- if (strncasecmp("foo_", "FoO_", 4)) { }
- if (strpbrk("a8f9", "sometext")) { }
- Slow
- Optimizing str_replace()
- replacement 할 필요가 없는 것들을 제거 하고 사용할것
- 바꿔야 할 문자열과 대치해야할 문자열 중 필요 없는건 제거 할것
- replacement 할 필요가 없는 것들을 제거 하고 사용할것
- strtr() vs str_replace()
- str_replace 가 strtr 보다 10배 정도 빠르다.
- fopen() vs file_get_contents()
- file_get_contents() 가 훨씬 간단하고 빠르다.
- 쓰면 유용한 함수들
- file_put_contents()
- Append data to files or create new files in one shot.
- microtime() and gettimeofday()
- Return floats when passed TRUE as a 1st argument.
- mkdir()
- Can create directory trees, when 2nd arg. is TRUE.
- glob()
- Fetch all array of files/directories in one shot.
- convert_uuencode,convert_uudecode
- Fast UU encoding/decoding mechanism.
- http_build_query()
- Build GET/POST query based on associated array.
- substr_compare()
- strcmp/strncasecmp/etc… from an offset.
- array_walk_recursive()
- Recursively iterate through an array.
- convert_uuencode,convert_uudecode
- Fast UU encoding/decoding mechanism.
- http_build_query()
- Build GET/POST query based on associated array.
- substr_compare()
- strcmp/strncasecmp/etc… from an offset.
- array_walk_recursive()
- Recursively iterate through an array.
- file_put_contents()
- Multi-dimensioal Array trick
- slow 2 extra hash lookups per access
- $a['b']['c'] = array();
- for($i = 0; $i < 5; $i++) $a['b']['c'][$i] = $i;
- much faster reference based approach
- $ref =& $a['b']['c'];
- for($i = 0; $i < 5; $i++) $ref[$i] = $i;
- slow 2 extra hash lookups per access
- Static 선언은 50-75% 의 성능 향상을 준다.
- 불필요한 wrapper 를 제거 한다.
- The simpler the code, the faster it runs, it really is that simple.
- string concatenation
- echo ''; 보다 echo ''; 가 일반적이다.
- include nested-looping 사용에 대한 주의
main require_once php_self require_once (2x) session_is_registered require_once require_once require_once (3x) require_once (2x) require_once require_once require_once require_once is_array use_plugin file_exists include_once function_exists ... etc
If you do much object-oriented development, you may find that you rapidly lose track of what's actually going on inside some classes and methods. It's tempting to think of classes as a black box, because that's how we're taught to use them. But, when optimizing a complex Web application, you need to know what's actually going on inside each one, or you may have performance bottlenecks you do not even notice.
- Avoid repeated function calls
- for ( $i=0; $i<count($aArray); $i++ ) {} : bad
- $nCnt = count($aArray); for ( $i=0; $i<$nCnt; $i++ ) {} : good
- string concatenation
- sprintf 보다 plain string concatenation 이 두배 정도 빠르다.
- print() 대신 echo 를 사용 하라.
- string 표현은 signle quotes 를 사용 하라.
- Reduces Number Of System Calls (Optimizes PHP<->OS Communication)