2020年6月

众所周知,高质量的代码可以减轻服务器的压力,同时也能让人赏心悦目。
以下是本人近期总结的优化技巧:

  1. 能不用正则解决的问题,尽量不用正则;
  2. 在includes和requires中使用绝对路径,这样在分析路径花的时间更少;
  3. 使用requiere_once代价比requiere高;
  4. str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍;
  5. 多个分支的条件判断用switch、case优于if、elseif;
  6. 尽量少用@屏蔽错误,这样做效率灰常低;
  7. echo 比 print快,echo 可以打印用逗号分割的字符串;
  8. 执行for循环之前确定最大循环数,而不是每次循环都去计算最大值,可以的话尽量使用foreach代替;
  9. 尽量使用PHP的内置函数;
  10. 并不是所有情况都必须使用面向对象开发,面向对象往往开销很大,每个方法和对象调用都会消耗很多内存;
  11. 如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍;
  12. 递增一个对象属性,要比递增一个局部变量慢3倍;
  13. 派生类中的方法运行起来要快于在基类中定义的同样的方法;
  14. 用单引号替代双引号引用字符串;
  15. 在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多;
  16. 尽量做缓存,例如 memcached、redis;
  17. 尽量多用静态HTML页面,少用脚本,服务器解析一个PHP脚本的时间要比一个静态html页面要慢2-10倍;
  18. 尽量少用global变量,对global变量,应该用完就unset()掉;
  19. 禁止过多的循环套循环,嵌套过多的循环会拉低执行效率;
  20. 开启服务器gzip压缩。

一、多阅读手册和源代码
  没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数。就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发现在以往的项目开发过程中,很多时候你在“重复发明轮子”,而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。另外,现在有很多使用PHP开发的开源程序。为什么不去学习和借鉴呢?下载一份开源的PHP应用程序的源代码,仔细阅读它吧。也许越大的项目越值得去阅读,虽然它们也许有更复杂的结构和系统,但也有更详细的解释文档。
  
二、编写模块化代码
  良好的PHP代码应该是模块化的代码。PHP的面向对象的编程功能是一些特别强大的工具,可以把你的应用程序分解成函数或方法。你应该尽可能多的从你的应用程序的服务器端分开前端的HTML/CSS/JavaScript代码,你也可以在任何PHP框架上遵循MVC(模型-视图-控制器)模式。
  
三、代码编写规范
  良好的PHP代码应该有一套完整的代码编写规范。通过对变量和函数的命名,统一的方法访问数据库和对错误的处理,以及同样的代码缩进方式等来达到编程规范,这样可以使你的代码更具可读性。
 
四、编写可移植代码
  良好的PHP代码应该是可移植的。你可以使用php的现有功能,如魔术引号和短标签。试着了解你的需求,然后通过适应PHP特性来编写代码让代码独立、可移植。
  
五、编写安全代码
  良好的PHP代码应该是安全的。PHP5提供了出色的性能和灵活性。但是安全问题完全在于开发人员。对于一个专业的PHP开发人员来说,深入理解重大安全漏洞是至关重要的,如:跨站点脚本(XSS)、跨站请求伪造(CSRF)、代码注入漏洞、字符编码漏洞。通过使用PHP的特殊功能和函数,如:mysql_real_escape_string等等,你可以编写出安全的代码。
  
六、代码注释
  代码注释是代码的重要组成部分。通过代码注释可以知道该变量或函数是做什么的,这将在今后的代码维护中十分有用。
  
七、使用单引号代替双引号
  字符串始终使用单引号代替双引号,以避免PHP搜索字符串内的变量导致的性能下降。用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会
  
八、转义字符串输出
  使用ENT_QUOTES作参数传递给htmlspecialchars函数,以确保单引号(')也转换成HTML实体,这是一个好习惯。
  
九、使用逗号分隔字符串输出
  通过echo语句输出使用逗号(,)分隔的字符串,要比使用字符串连接操作符(.)的性能更好。
  
十、输出前检查传来的值
  输出前检查传过来的值$_GET['query']。使用isset或empty函数,可以用来检查变量是否为null值。