提升PHP程序性能:优化变量类型与关闭Debug日志的实用技巧

在项目开发过程中,我们经常会遇到一些PHP处理程序性能较差的情况。程序运行在centos+nginx环境下。虽然造成这种情况的原因有很多,比如:服务器配置、运行环境nginx服务、php-fpm配置等。还有一点就是PHPer并没有更好地优化程序。

提升PHP程序性能:优化变量类型与关闭Debug日志的实用技巧

第一类,变量类型:

1)主要使用未定义变量和直接使用变量。当程序开发完成后,程序员喜欢关闭调试,以便隐藏所有通知和警告。但事实上,即使关闭debug,PHP也会记录日志。将所有Notice和Warning信息写入日志文件无非是浪费性能。很多PHPers都有这个小习惯,包括我。

2)另外,应尽量注意程序中变量的使用。例如,字符串最好使用单引号而不是双引号。毕竟双引号在执行之前必须被PHP解析成单引号。

3)说到这里,数组中的键值索引也需要使用单引号。不要写引号。这样程序的执行效率就会极低。

第二类,函数类型:

1)会话变量。大家都知道调用了全局变量SESSION。通常,人们将值放入SESSION后,直接去编写自己的代码,但却忘记了SESSION变量在页面执行之前不会更改值。把它放到一个SESSION中供其他页面使用,这样如果这个页面的执行时间太长,其他页面也会调用这个SESSION,并且会等待SESSION中的页面写入完成后再执行其他进程。序列,但我们的程序不希望出现这种效果,因为我们只需执行完后将值写入SESSION即可,而不是等待页面执行完毕。这个SESSION变量从PHP官网也可以看到这个问题确实存在,所以我们需要在写入SESSION后关闭写入SESSION操作。添加session_write_close()函数可以减少等待页面加载的无用时间。 2)file_get_contents()函数,这个函数的意思是获取远程URL的页面内容,不过虽然是这样写的,但是很多人都不会注意这样一个“超时”的问题。如果无法获取页面内容,程序就会一直卡在这里。 ,很多人会接触设置页面超时或者在php.ini文件中设置max_execution_time是最大执行超时,但是如果你使用的是php-fpm(即php-cgi),这个参数会被认为无效,并且需要在php-fpm配置文件中设置最大执行超时。最终,这是行不通的。函数,我们需要解决这个问题。我们还是需要在调用函数的时候加上超时,这样才能从根本上解决问题。

第三类,参考文件类型:

参考文件很多时候我们习惯性的使用include,但是其中也隐藏着一些使用技巧。经常使用框架开发程序的人都会很熟悉。项目下会有一个带有“include”字样的文件夹。搜索包含文件的顺序是先在当前工作目录根路径下的include文件夹中搜索,然后在相对于当前文件所在目录的include文件夹中搜索。也就是说,如果这个include使用不当的话,程序会在根路径下按这种方式依次查找。这也是一件非常令人困惑的事情,所以你应该尝试将你使用的文件写在最容易找到的位置。这将是有益的。程序执行效率。此外,还有像 echo 这样的函数可以输出多个字符串或变量。使用“.”的执行效率连接比“,”连接低。

更详细的总结如下:

1.使用单引号而不是双引号来包含字符串,这样会更快。因为 PHP 会搜索双引号包围的字符串中的变量,但单引号不会。注意:只有echo可以做到这一点,它是一个可以接受多个字符串作为参数的“函数”(译注:PHP手册中说echo是一种语言结构,而不是真正的函数,所以函数用双引号括起来) 。

2、如果可以将类方法定义为静态,尽量将其定义为静态,其速度会提高近4倍。

3、$row['id']的速度是$row[id]的7倍。

4、echo比print更快,并且使用echo的多个参数(译注:指用逗号代替句点)而不是字符串拼接,如echo str1,str2。

5. 在执行for循环之前确定最大循环次数。不要每次循环都计算最大值。最好使用 foreach 来代替。

6. 取消注册未使用的变量,尤其是大型数组,以释放内存。

7.尽量避免使用__get、__set、__autoload。

8. require_once() 很昂贵。

9、包含文件时尽量使用绝对路径,因为这样可以避免PHP在include_path中搜索文件的速度加快,解析操作系统路径所需的时间也会更少。

10. 如果你想知道脚本开始执行的时刻(注解:服务器收到客户端请求),使用

11、函数代替正则表达式完成同样的功能。

12. str_replace函数比preg_replace函数更快,但strtr函数比str_replace函数效率高四倍。

13、如果字符串替换函数接受数组或者字符作为参数,并且参数长度又不太长,那么可以考虑多写一段替换代码,让传递的每个参数都是一个字符,而不是只写一行接受数组的代码。作为查询和替换的参数。

14、使用选择性分支语句(翻译注释:switch case)比使用多个if、else、if语句更好。

15、用@来屏蔽错误信息是非常低效的,极其低效的。

16、打开apache的mod_deflate模块,提高网页的浏览速度。

17、数据库连接使用完毕后应关闭,不要使用长连接。

18. 错误消息的代价是昂贵的。

19. 增加方法中的局部变量是最快的。几乎与在函数中调用局部变量一样快。

20. 递增全局变量比递增局部变量慢 2 倍。

21. 增加一个对象属性(例如:$this->prop++)比增加一个局部变量慢3倍。

22. 递增未定义的局部变量比递增预定义的局部变量慢 9 到 10 倍。

23、只定义局部变量而不在函数中调用它也会降低速度(与递增局部变量的程度相同)。 PHP 可能会检查全局变量是否存在。

24. 方法调用似乎与类中定义的方法数量无关,因为我添加了 10 个方法(在测试方法之前和之后),并且性能没有变化。

25. 派生类中的方法比基类中定义的相同方法运行得更快。

26. 调用一个带有一个参数的空函数所花费的时间相当于局部变量递增 7 到 8 倍。类似的方法调用需要接近 15 个局部变量增量。

27. Apache 解析 PHP 脚本的速度比解析静态 HTML 页面慢 2 到 10 倍。尝试使用更多的静态 HTML 页面和更少的脚本。

28.除非脚本可以缓存,否则每次调用都会重新编译。引入 PHP 缓存机制通常可以将性能提高 25% 到 100%,以消除编译开销。

29.尽量缓存,可以使用memcached。 Memcached 是一个高性能内存对象缓存系统,可用于加速动态 Web 应用程序并减少数据库负载。 OP 代码的缓存很有用,这样就不必为每个请求重新编译脚本。

30、当操作一个字符串,需要检查其长度是否满足一定要求时,自然会用到strlen()函数。这个函数执行得相当快,因为​​它不做任何计算,只是返回存储在 zval 结构(C 的内置数据结构,用于存储 PHP 变量)中的已知字符串长度。不过,由于strlen()是一个函数,所以会有些慢,因为函数调用会经过很多步骤,比如小写字母(译注:指小写函数名,PHP不区分函数名大小写) )、哈希搜索,会与被调用的函数一起执行。在某些情况下,您可以使用 isset() 技巧来加快代码的执行速度。

(如下例)

1if (strlen($foo) < 5) { echo “Foo is too short”$$ }
2
3(与下面的技巧做比较)
4
5if (!isset($foo{5})) { echo “Foo is too short”$$ }

调用 isset() 恰好比 strlen() 更快,因为与后者不同,isset() 作为一种语言构造,意味着它的执行不需要函数查找和小写字母。也就是说,您实际上不会在顶级代码检查字符串长度上花费太多开销。

31. 当执行变量i的递增或递减时,i会比i慢。这种差异是 PHP 特有的,不适用于其他语言,因此请不要修改您的 C 或 Java 代码并期望它立即更快,这是行不通的。 i 更快,因为它只需要 3 条指令(操作码),而 i 需要 4 条指令。后递增实际上创建了一个随后递增的临时变量。前缀增量直接在原始值上增加。这是一种优化形式,由 Zend 的 PHP 优化器完成。记住这种优化是个好主意,因为并非所有命令优化器都会执行相同的优化,并且有大量 Internet 服务提供商 (ISP) 和服务器没有安装命令优化器。

32. 并不是一切都必须面向对象(OOP),面向对象往往非常昂贵,而且每个方法和对象调用都会消耗大量内存。

33. 没有必要使用类来实现所有数据结构。数组也很有用。

34、方法不要细分太多。仔细想想你真正打算重用哪些代码?

35. 当需要时,您始终可以将代码分解为方法。

36. 尝试使用大量PHP内置函数。

37、如果代码中有大量耗时的函数,可以考虑将其实现为C扩展。

38. 分析您的代码。检查器会告诉您代码的哪些部分花费了多少时间。 Xdebug 调试器包括检查例程,用于评估代码的整体完整性并揭示代码中的瓶颈。

39. mod_zip可以作为Apache模块来即时压缩您的数据,并减少80%的数据传输量。

40、当file_get_contents可以代替file、fopen、feof、fgets等一系列方法时,尽量使用file_get_contents,因为效率高很多!但打开URL文件时要注意file_get_contents的PHP版本问题。

41、尽可能少地执行文件操作,尽管PHP的文件操作效率并不低。

42、优化Select SQL语句,尽可能少执行Insert和Update操作(我因为更新而被批评)。

43.尽可能使用PHP内部函数(但是为了找到PHP中不存在的函数,我浪费了本来可以通过编写自定义函数来编写的时间,这是经验问题!)。

44.不要在循环内声明变量,尤其是大变量:对象(这似乎不仅仅是PHP的问题?)。

45. 尽量不要在多维数组中循环和嵌套赋值。

46.当可以使用PHP内部字符串操作函数时,不要使用正则表达式。

47. Foreach 效率更高。尝试使用 foreach 而不是 while 和 for 循环。

48. 使用单引号而不是双引号来引用字符串。

49.用i+=1代替i=i+1。符合c/c++的习惯,效率高。

50. 全局变量在使用时应该被unset()ed。

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

52阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

47阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读