>백엔드 개발 >PHP 튜토리얼 >효율적인 프로그래밍: PHP 최적화 지침 소개

효율적인 프로그래밍: PHP 최적화 지침 소개

不言
不言앞으로
2018-10-25 17:00:252486검색

이 기사의 내용은 고효율 프로그래밍: PHP 최적화 지침에 관한 것으로, 필요한 친구들이 참고할 수 있기를 바랍니다.

  • 정규식을 덜 사용하세요

str_replace 함수는 preg_replace 보다 훨씬 빠르고, strtr 함수는 str_replace 가 빠르게 제공됩니다. str_replace 函数要比 preg_replace 快得多,strtr 函数又比 str_replace 来得快。

strpbrk()、strncasecmp()、strpos()、strrpos()、stripos()、strripos()。
  • 字符替换

str_replace 字符替换比正则替换 preg_replace快,但 strtr 比 str_replace 又快1/4。

另外,不要做无谓的替换,即使没有替换,str_replace也会为其参数分配内存。很慢!

用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换。

如果需要替换,效率几乎相等,差别在 0.1% 左右。

如果不需要替换:用 strpos 快 200%。

  • 使用$_SERVER变量

如果你需要得到脚本执行的时间,$_SERVER['REQUSET_TIME']优于time()

一个是现成就可以直接用,一个还需要函数得出的结果。

  • 使用++$i递增

当执行变量$i的递增或递减时,$i++会比++$i慢一些。

这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码,并指望它们能立即变快,没用的。

++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。

  • 压缩大的字符串

使用 gzcompress() 和 gzuncompress() 对容量大的字符串进行压缩和解压,再存入和取出数据库

这种内置的函数使用gzip算法,能压缩字符串90%

  • 读取文件内容

在可以用file_get_contents()替代file()fopen()feof()fgets()等系列方法的情况下,尽量用file_get_contents()

  • echo 输出

echo 字符串用逗号代替点连接符更快些。

虽然,echo是一种语言结构,不是真正的函数。

但是,它可以把逗号隔开的多个字符串当作“函数”参数传入,所以速度会更快。

aa1760bf9ba9425bf1805c6a4819e4c2。

这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

  • 永远不要使用register_globalsmagic quotes

这是两个很古老的功能,在当时(十年前)也许是一个好方法,但现在看来并非如此。

老版本的PHP在安装时会默认打开这两个功能,这会引起安全漏洞、编程错误及其他的问题。

如只有用户输入了数据时才会创建变量等。

PHP5.4.0开始这两个功能都被舍弃了,所以每个程序员都应该避免使用。

如果你过去的程序有使用这两项功能,那就尽快将其剔除吧。

  • 使用绝对路径

includerequire中尽量使用绝对路径。

如果包含相对路径,PHP会在include_pathrrreee

🎜🎜🎜문자 교체🎜🎜🎜🎜🎜 str_replace 문자 교체는 일반 교체 preg_replace보다 빠르지만 strtr은 str_replace보다 1/4 빠릅니다. 🎜🎜또한 불필요한 대체를 수행하지 마십시오. str_replace는 대체가 없더라도 매개변수에 메모리를 할당합니다. 매우 느리다! 🎜🎜strpos를 사용하여 먼저(매우 빠르게) 검색하여 교체가 필요한지 확인하고, 그렇다면 교체하세요. 🎜🎜교체가 필요한 경우 효율성은 거의 동일하며 차이는 약 0.1%입니다. 🎜🎜교체가 필요하지 않은 경우: strpos를 200% 더 빠르게 사용하세요. 🎜🎜🎜🎜🎜$_SERVER 변수를 사용하세요 🎜🎜🎜🎜🎜스크립트 실행 시간을 구해야 한다면 $_SERVER['REQUSET_TIME']time()보다 낫습니다 코드>. 🎜🎜하나는 기성품으로 바로 사용할 수 있고, 다른 하나는 함수를 통해 얻은 결과가 필요합니다. 🎜🎜🎜🎜🎜변수 $i, $i++ 코드의 증가 또는 감소를 수행할 때 🎜<code>++$i🎜increment🎜🎜🎜🎜🎜를 사용하세요. >은 ++$i보다 느립니다. 🎜🎜이 차이점은 PHP에만 해당되며 다른 언어에는 적용되지 않습니다. 따라서 C 또는 Java 코드를 수정하지 말고 즉시 더 빨라질 것으로 기대하세요. 작동하지 않습니다. 🎜🎜++$i에는 3개의 명령어(opcode)만 필요하고 $i++에는 4개의 명령어가 필요하므로 더 빠릅니다. 🎜🎜🎜🎜🎜큰 문자열 압축🎜🎜🎜🎜🎜gzcompress() 및 gzuncompress()를 사용하여 대용량 문자열을 압축 및 압축 해제한 다음 🎜데이터베이스에서 저장하고 검색🎜하세요. 🎜🎜이 내장 함수는 gzip 알고리즘을 사용하며 문자열을 90% 압축할 수 있습니다. 🎜🎜🎜🎜🎜파일 내용 읽기🎜🎜🎜🎜🎜 file(), fopen(), feof(), <code>fgets() 및 기타 일련의 메서드를 사용하려면 file_get_contents()를 사용해 보세요. 🎜🎜🎜🎜🎜echo 출력 🎜🎜🎜🎜🎜 도트 커넥터 대신 🎜comma🎜을 사용하는 에코 문자열이 더 빠릅니다. 🎜🎜하지만 echo는 언어 구조이지 실제 함수는 아닙니다. 🎜🎜그러나 쉼표로 구분된 여러 문자열을 "함수" 매개변수로 전달할 수 있으므로 속도가 더 빨라집니다. 🎜🎜7fd2ff592e0ea4cac8110ff9a47a272b를 삭제하는 것이 가장 좋습니다. 🎜🎜이렇게 하면 실수로 PHP 종료 태그 뒤에 공백이나 개행 문자가 추가되는 경우 PHP가 이러한 공백을 출력하기 시작하며 현재로서는 스크립트에서 공백을 출력할 의도가 없습니다. 🎜🎜🎜🎜🎜register_globals마법의 인용문을 절대 사용하지 마세요🎜🎜🎜🎜🎜이 두 가지 아주 오래된 기능이지만 그 당시(10년 전)에는 하나였을 수도 있습니다. 좋은 접근 방식 , 하지만 지금은 그렇지 않은 것 같습니다. 🎜🎜이전 버전의 PHP는 설치 시 기본적으로 이 두 가지 기능을 활성화하므로 보안 취약점, 프로그래밍 오류 및 기타 문제가 발생할 수 있습니다. 🎜🎜예를 들어 변수는 사용자가 데이터 등을 입력할 때만 생성됩니다. 🎜🎜이 두 기능은 모두 PHP 5.4.0 이후로 중단되었으므로 모든 프로그래머는 이 기능을 사용하지 말아야 합니다. 🎜🎜이전 프로그램에서 이 두 가지 기능을 사용한 경우 최대한 빨리 삭제하세요. 🎜🎜🎜🎜🎜절대 경로 사용🎜🎜🎜🎜🎜 includerequire에서 절대 경로를 사용해 보세요. 🎜🎜상대 경로가 포함된 경우 PHP는 include_path에서 파일을 찾기 위해 순회합니다. 절대 경로를 사용하면 이러한 문제를 방지하고 경로를 해결하는 데 더 적은 시간이 소요됩니다. 🎜

파일을 포함할 때 require_onceinclude_once를 사용하지 마세요. 파일 참조 여부를 확인하는 추가 프로세스가 있으므로 가능하면 사용하지 마세요. require_onceinclude_once包含文件,它们多一个判断文件是否被引用的过程,能不用尽量不用。

而使用requireinclude方法代替。

  • 函数快于类方法

调用只有一个参数、并且函数体为空的函数,花费的时间等于7-8$localvar++运算。

而同一功能的类方法大约为15次$localvar++运算。

  •  用子类方法

基类里面只放能重用的方法,其他功能尽量放在子类中实现,子类里方法的性能优于在基类中。

  •  引用传递参数

通过参数地址引用的方式,实现函数多个返回值,这比按值传递效率高。方法是在参数变量前加个 &

  • 尽量静态化

如果一个方法能被静态,那就声明它为静态的,速度可提高1/4

대신 requireinclude 메소드를 사용하세요.

  • 함수는 클래스 메서드보다 빠릅니다

# 🎜 🎜#단 하나의 매개변수와 빈 함수 본문을 사용하여 함수를 호출하는 데는 $localvar++ 작업의 7-8배에 해당하는 시간이 걸립니다. 동일한 기능을 가진 클래스 메소드에는 약 15번의 $localvar++ 연산이 필요합니다.
하위 클래스 메서드 사용

#🎜🎜 # 재사용 가능한 메서드만 기본 클래스에 배치되며, 다른 함수는 가능한 한 하위 클래스에서 구현되어야 합니다.

  • 참조로 전달된 매개변수

    #🎜🎜#
#🎜🎜 # 매개변수 주소 참조를 통해 함수의 다중 반환 값이 구현되는데, 이는 값으로 전달하는 것보다 효율적입니다. 방법은 매개변수 변수 앞에 &를 추가하는 것입니다. #🎜🎜#
  • #🎜🎜##🎜🎜# 최대한 정적으로 유지하세요 #🎜🎜##🎜🎜#
#🎜🎜# 메소드가 정적일 수 있는 경우 이를 정적으로 선언하면 속도가 1/4 증가할 수 있습니다. 테스트해봐도 거의 3배나 빨라졌습니다. #🎜🎜##🎜🎜#정적 방법과 비정적 방법 간 효율성의 주요 차이점은 #🎜🎜#memory#🎜🎜#입니다. 정적 메서드는 프로그램이 시작될 때 메모리를 생성하고, 인스턴스 메서드(비정적 메서드)는 프로그램이 실행되는 동안 메모리를 생성합니다. #🎜🎜##🎜🎜# 따라서 정적 메서드는 직접 호출할 수 있으며 인스턴스 메서드는 먼저 인스턴스를 만든 다음 호출해야 합니다. 정적 메서드는 매우 빠르지만 #🎜🎜##🎜🎜# 너무 많으면 메모리를 차지합니다. #🎜🎜## 🎜🎜#. #🎜🎜##🎜🎜#모든 언어가 메모리와 디스크에서 작동하는지 여부는 소프트웨어 계층의 문제일 뿐이지만 구현 방법이 다릅니다. #🎜🎜##🎜🎜#정적 메모리는 프로그램 시작 시 생성되기 때문에 연속적인 반면, 인스턴스 방식은 불연속적인 공간을 적용하므로 당연히 정적 방식만큼 빠르지는 않습니다. #🎜🎜##🎜🎜#정적 메서드는 항상 동일한 메모리를 호출합니다. 단점은 자동으로 소멸될 수 없지만 인스턴스화는 소멸될 수 있다는 것입니다. #🎜🎜#

위 내용은 효율적인 프로그래밍: PHP 최적화 지침 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제