이 기사의 내용은 고효율 프로그래밍: 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_globals
和magic quotes
这是两个很古老的功能,在当时(十年前)也许是一个好方法,但现在看来并非如此。
老版本的PHP在安装时会默认打开这两个功能,这会引起安全漏洞、编程错误及其他的问题。
如只有用户输入了数据时才会创建变量等。
PHP5.4.0开始这两个功能都被舍弃了,所以每个程序员都应该避免使用。
如果你过去的程序有使用这两项功能,那就尽快将其剔除吧。
使用绝对路径
在include
和require
中尽量使用绝对路径。
如果包含相对路径,PHP会在include_path
rrreee
$_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 이후로 중단되었으므로 모든 프로그래머는 이 기능을 사용하지 말아야 합니다. 🎜🎜이전 프로그램에서 이 두 가지 기능을 사용한 경우 최대한 빨리 삭제하세요. 🎜🎜🎜🎜🎜절대 경로 사용🎜🎜🎜🎜🎜 include
및 require
에서 절대 경로를 사용해 보세요. 🎜🎜상대 경로가 포함된 경우 PHP는 include_path
에서 파일을 찾기 위해 순회합니다. 절대 경로를 사용하면 이러한 문제를 방지하고 경로를 해결하는 데 더 적은 시간이 소요됩니다. 🎜파일을 포함할 때 require_once
및 include_once
를 사용하지 마세요. 파일 참조 여부를 확인하는 추가 프로세스가 있으므로 가능하면 사용하지 마세요. require_once
和include_once
包含文件,它们多一个判断文件是否被引用的过程,能不用尽量不用。
而使用require
、include
方法代替。
函数快于类方法
调用只有一个参数、并且函数体为空的函数,花费的时间等于7-8
次$localvar++
运算。
而同一功能的类方法大约为15次$localvar++
运算。
用子类方法
基类里面只放能重用的方法,其他功能尽量放在子类中实现,子类里方法的性能优于在基类中。
引用传递参数
通过参数地址引用的方式,实现函数多个返回值,这比按值传递效率高。方法是在参数变量前加个 &
。
尽量静态化
如果一个方法能被静态,那就声明它为静态的,速度可提高1/4
require
및 include
메소드를 사용하세요.
$localvar++
작업의 7-8
배에 해당하는 시간이 걸립니다. 동일한 기능을 가진 클래스 메소드에는 약 15번의 $localvar++
연산이 필요합니다. 참조로 전달된 매개변수
#🎜🎜#&
를 추가하는 것입니다. #🎜🎜#1/4
증가할 수 있습니다. 테스트해봐도 거의 3배나 빨라졌습니다. #🎜🎜##🎜🎜#정적 방법과 비정적 방법 간 효율성의 주요 차이점은 #🎜🎜#memory#🎜🎜#입니다. 정적 메서드는 프로그램이 시작될 때 메모리를 생성하고, 인스턴스 메서드(비정적 메서드)는 프로그램이 실행되는 동안 메모리를 생성합니다. #🎜🎜##🎜🎜# 따라서 정적 메서드는 직접 호출할 수 있으며 인스턴스 메서드는 먼저 인스턴스를 만든 다음 호출해야 합니다. 정적 메서드는 매우 빠르지만 #🎜🎜##🎜🎜# 너무 많으면 메모리를 차지합니다. #🎜🎜## 🎜🎜#. #🎜🎜##🎜🎜#모든 언어가 메모리와 디스크에서 작동하는지 여부는 소프트웨어 계층의 문제일 뿐이지만 구현 방법이 다릅니다. #🎜🎜##🎜🎜#정적 메모리는 프로그램 시작 시 생성되기 때문에 연속적인 반면, 인스턴스 방식은 불연속적인 공간을 적용하므로 당연히 정적 방식만큼 빠르지는 않습니다. #🎜🎜##🎜🎜#정적 메서드는 항상 동일한 메모리를 호출합니다. 단점은 자동으로 소멸될 수 없지만 인스턴스화는 소멸될 수 있다는 것입니다. #🎜🎜#위 내용은 효율적인 프로그래밍: PHP 최적화 지침 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!