>  기사  >  백엔드 개발  >  개발 환경 최적화 경험 PHP 실행 속도 최적화 기술 요약

개발 환경 최적화 경험 PHP 실행 속도 최적화 기술 요약

WBOY
WBOY원래의
2016-07-29 08:37:25963검색

1. file, fopen, feof, fgets 및 기타 일련의 메소드 대신 file_get_contents를 사용할 수 있는 경우 훨씬 더 효율적이므로 file_get_contents를 사용해 보세요! 하지만 URL 파일을 열 때 PHP 버전의 file_get_contents 문제에 주의하세요.
2. PHP의 파일 작업 효율성은 낮지 않지만 가능한 한 적은 수의 파일 작업을 수행하세요.
3. 상황에 따라 가능한 한 INSERT 및 UPDATE 작업을 적게 수행하십시오. (저는 UPDATE에 대해 비판을 받았습니다.)
4. PHP 내부 기능을 최대한 사용합니다. (하지만 구문을 찾으려고 많은 돈을 낭비했습니다. PHP에 존재하지 않는 함수) 사용자 정의 함수를 작성하는 데 시간이 더 적게 걸릴 것입니다. 경험의 문제입니다!)
5. 루프 내부에 변수, 특히 큰 변수를 선언하지 마십시오. 단지 PHP의 문제는 아니죠?)
6. 다차원 배열의 경우 중첩 할당을 사용하지 마세요.
7. PHP의 내부 문자열 조작 기능을 사용할 수 있으면 정규 표현식을 사용하지 마세요.
8. Foreach를 사용하면 while 및 for 루프를 대체할 수 있습니다.
9. 문자열을 인용하려면 큰따옴표 대신 작은따옴표를 사용하세요.
10. 1. c/c 습관을 준수하며 매우 효율적입니다.
11. 전역 변수는 사용 후 설정 해제()되어야 합니다.
정적 호출 멤버는 정적으로 정의되어야 합니다(PHP5에만 해당).
팁: PHP5에서는 정적 멤버의 개념은 PHP4의 함수 내부의 정적 변수와 동일한 기능을 가지지만 전자를 클래스의 멤버로 사용하는 것입니다. 정적 변수는 Ruby의 클래스 변수와 유사합니다. 클래스의 모든 인스턴스는 동일한 정적 변수를 공유합니다. 비정적 멤버를 정적으로 호출하는 효율성은 정적 멤버를 정적으로 호출하는 것보다 50-60% 느립니다. 주로 전자는 E_STRICT 경고를 생성하고 내부적으로 변환해야 하기 때문입니다.
class foo {
function bar() {
echo 'foobar' }
}
$foo = new foo; / 인스턴스 방식
$foo->bar();// 정적 방식
foo::bar()
?> 클래스 상수 사용(PHP5 전용)
팁: C의 const와 유사한 PHP5의 새로운 기능입니다.
클래스 상수 사용의 이점은 다음과 같습니다.
- 컴파일 시간 구문 분석, 추가 오버헤드 없음
- 해시 테이블이 더 작아서 내부 조회가 더 빠릅니다
- 클래스 상수는 특정 " 네임스페이스"이므로 해시 이름이 더 짧습니다
- 코드가 더 깔끔하여 디버깅이 더 쉽습니다
(일시적으로) require/include_once를 사용하지 마세요
require/include_once는 호출될 때마다 대상 파일을 엽니다. !
- 절대 경로를 사용하는 경우 PHP 5.2/6.0에서는 이 문제가 발생하지 않습니다.
- 새로운 버전의 APC 캐시 시스템에서는 이 문제가 해결되었습니다.
파일 I/O 증가 => 효율성 감소
필요한 경우 파일이 필수/포함되었는지 직접 확인할 수 있습니다.
의미 없는 함수를 호출하지 마세요
해당 상수가 있을 때는 함수를 사용하지 마세요.
php_uname('s') == PHP_OS;
php_version() == PHP_VERSION;
php_sapi_name() ==
?> 많이 사용되지는 않지만 효율향상은 3500%정도 됩니다.
가장 빠른 Win32 검사
$is_win = DIRECTORY_SEPARATOR == '\'
?> XP/Vista/Longhorn/Shorthorn/Whistler... 범용
-항상 사용 가능
시간 문제(PHP>5.1.0 전용)
소프트웨어의 현재 시간을 어떻게 알 수 있습니까? 간단합니다. "time() time()을 다시 한 번 묻습니다..."입니다.
그러나 항상 함수를 호출하므로 속도가 느립니다.
이제 $_SERVER['REQUEST_TIME']을 사용하세요. 함수를 호출할 필요 없이 다시 저장하세요.
PCRE 가속화
- 저장할 필요가 없는 결과의 경우 ()를 사용하지 않고 항상 (?:)을 사용합니다.
이렇게 하면 PHP는 일치하는 내용에 대해 메모리를 할당할 필요가 없으며, 돈이 절약됩니다. 효율성은 약 15% 향상됩니다.
- 정규식을 사용할 수 있으면 정규식을 사용하지 마세요. 분석 시 매뉴얼의 "문자열 함수" 섹션을 주의 깊게 읽어보세요. 혹시 놓친 유용한 기능이 있나요?
예:
strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()
strtr 가속화
필요한 경우 변환된 문자가 단일인 경우 배열 대신 문자열을 사용하여 strtr을 수행합니다.
$addr = strtr($addr, "abcd", "efgh") // good
$addr = strtr($addr, array('a' => 'e', ​​​​
                                               10회
불필요한 대체를 하지 마세요.
대체가 없더라도 str_replace는 해당 매개변수에 메모리를 할당합니다.매우 느리다! 해결책:
- strpos를 사용하여 먼저 검색하여(매우 빠르게) 교체가 필요한지 확인합니다.
효율성:
- 교체가 필요한 경우: 효율성은 거의 동일하며 차이는 다음과 같습니다. 약 0.1%.
- 교체가 필요하지 않은 경우: strpos를 200% 더 빠르게 사용하세요.
사악한 ​​@ 연산자
@ 연산자를 남용하지 마세요. @는 단순해 보이지만 실제로는 그 뒤에는 많은 작업이 있습니다. @를 사용하는 것과 @를 사용하지 않는 것의 효율성 차이는 3배입니다.
특히 루프 5개 테스트에서는 error_reporting(0)을 사용하여 먼저 오류를 끈 다음 루프가 완료된 후 켜더라도 @를 사용하는 것보다 빠릅니다. .
strncmp를 잘 활용하세요
"첫 번째 n 문자"가 동일한지 비교해야 할 경우 PCRE는 물론 substr/strtolower 대신 strncmp/strncasecmp를 사용하고 ereg는 언급하지 마세요. strncmp/strncasecmp가 가장 효율적입니다(그다지 높지는 않지만).
substr_compare를 주의해서 사용하세요(PHP5에만 해당)
위 원칙에 따르면 substr_compare는 먼저 substr보다 빨라야 하고 그 다음에는 더 빨라야 합니다. 대답은 '아니요'입니다.
- 대소문자를 구분하지 않는 비교
- 더 큰 문자열 비교
문자열을 상수로 바꾸지 마세요
이유:
- 해시 테이블을 두 번 쿼리해야 합니다
- 상수 이름을 소문자로 변환해야 함(두 번째 쿼리 수행 시)
- E_NOTICE 경고 생성
- 임시 문자열이 생성됩니다
효율성 차이: 700%.
for 루프의 조건문에 count/strlen/sizeof를 넣지 마세요
팁: 개인적인 접근 방식
for ($i = 0, $max = count( $ array);$i < $max; $i);
?>
효율성 향상은
- count 50%
- 짧은 코드 반드시 빠르지는 않습니다
//가장 길다
if ($a == $b) {
$str .= $a
} else {
$ str .= $b; $b;
// short
$str .= ($a == $b ? $a : $b)
?> 어느 것이 더 빠르다고 생각하시나요?
효율성 비교:
-가장 길다: 4.27
-길다: 4.43
-짧다: 4.76
믿을 수 없지? 하나 더:
//original
$d = dir('.')
while (($entry = $d->read()) != = false) {
if ($entry == '.' || $entry == '..') {
계속
}
}
// 대
glob ('./*');
// (. 및 .. 포함)
scandir('.')
?> 어느 것이 더 빠릅니까?
효율성 비교:
- 원본: 3.37
- glob: 6.28
- scandir: 3.42
- OO 없는 원본: 3.14
- SPL(PHP5): 3.95
음성 해설 : 이것에서도 PHP5의 객체지향 효율성이 많이 향상되었음을 알 수 있는데, 그 효율성은 순수함수와 크게 다르지 않습니다.
PHP 파일 액세스 효율성 향상
다른 PHP 파일을 포함해야 하는 경우 전체 경로 또는 변환하기 쉬운 상대 경로를 사용하세요.
include 'file.php'; // 잘못된 접근 방식
include './file.php' // 좋음
include '/path/to/file.php' ; // 이상적입니다
?>
모든 것을 최대한 활용하세요
PHP에는 다양한 확장 기능과 기능이 있습니다. 함수를 구현하기 전에 PHP에 이 기능이 있는지 확인해야 합니다. 더 간단한 구현이 있습니까?
$filename = "./somepic.gif";
$handle = fopen($filename, "rb")
$contents = fread($handle, filesize( $filename));
fclose($handle);// 훨씬 간단함
file_get_contents('./somepic.gif')
?> 🎜>참조는 다음을 수행할 수 있습니다.
- 복잡한 구조적 데이터에 대한 액세스 단순화
- 메모리 사용량 최적화
$a['b']['c'] = array()
// 액세스당 2개의 추가 해시 조회를 느리게
for ($i = 0; $i < 5; $i)
$a['b']['c'][$i ] = $i;
// 훨씬 빠른 참조 기반 접근 방식
$ref =& $a['b']['c']
for ($i = 0; $i < 5 ; $ i)
$ref[$i] = $i;
?>
$a = '큰 문자열'
// 메모리 집약적 접근 방식
function a($str){
return $str.'something';
}
// 더 효율적인 솔루션
function a(&$str){
$str .= 'something ';
}
?>
============================= ============
참고 자료
http://ilia.ws
Ilia의 개인 웹사이트, 블로그, 그가 참여하고 출판한 일부 개발에 대한 링크 등 . 기다리다.
http://ez.no
eZ 컴포넌트 공식 홈페이지인 eZ comp는 PHP5용 오픈소스 범용 라이브러리로 효율성을 스스로 책임지고 있으며 Ilia도 개발에 참여했습니다.
http://phparch.com
php|architect는 훌륭한 PHP 게시자/교육 기관입니다. 감당할 수 없거나 구입할 수 없다면 온라인에서 구할 수 있는 고전의 해적판 사본이 많이 있습니다.
http://talks.php.net
PHP 컨퍼런스에서 발표한 내용은 아직 풍부하지는 않지만, 내용은 모두 한눈에 잠도 잊고 밥도 먹을 정도로 좋은 것들입니다. 아침에 졸릴 때 추천합니다. 아니면 점심 식사 후에 주의 깊게 공부하세요. 그렇지 않으면 먹고 자는 것을 잊어버릴 것입니다!


위 내용은 개발 환경 최적화 경험을 비롯해 PHP 실행 속도 최적화 기술에 대한 요약과 개발 환경 최적화 경험을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.