在项目开发过程中,我们经常会遇到一些PHP处理程序性能较差的情况。程序运行在+nginx环境中。虽然造成这种情况的原因有很多,比如:服务器本身配置、运行环境nginx服务、php-fpm配置等等,但有一点还是PHPer没有对程序进行更好的优化。
第一类,变量类型:
1)主要使用未定义的变量,直接使用变量。在程序开发结束时,程序员喜欢关闭debug来隐藏一切,但事实上,即使关闭debug,PHP也会记录日志,而所有将和信息写入日志文件无非是浪费时间表现。很多都有这个小习惯,包括我。
2)另外,应尽量注意程序中变量的使用。例如,字符串最好使用单引号而不是双引号。毕竟双引号在执行之前必须被PHP解析成单引号。
3)说到这里,数组中的键值索引也需要使用单引号。没有这样的程序就不要写引号,这样执行效率会极低。
第二类,函数类型:
1)变量。大家都知道叫这个全局变量。往往把值放进去之后,大家就直接去写自己的代码,却忘记了变量要等到页面执行完毕之后才会把值放进去。被其他页面使用,所以如果这个页面的执行时间太长,其他页面也会调用这个,并且会等待写入的页面完成后再执行其他程序。然而,我们的程序并不希望出现这种效果,因为我们只需要执行完后写入值,然后将其放在中心,而不用等待页面执行完毕。从PHP官网也可以看出,这个变量确实存在这个问题,所以我们需要在写入后关闭写入操作,并添加上面()函数可以减少等待页面加载的无用时间。 2)()函数,这个函数的意思是获取远程URL的页面内容,但即使这样写,很多人也不会关注“超时”这样的问题。如果无法获取页面内容,程序就会一直卡在这里。很多人会联系你设置页面超时或者在php.ini文件中设置最大执行超时,但是如果你使用的是php-fpm(即php-cgi),这个参数会被认为无效,你需要在php中设置-在fpm配置文件中设置最大执行超时最终不起作用。这个问题需要解决。我们还是需要在调用函数的时候加上超时,这样才能从根本上解决问题。
第三类,参考文件类型:
我们经常习惯性地使用参考文件,但其中也隐藏着一些使用技巧。经常使用框架开发程序的人都会很熟悉。工程项目下会有一个带有“”字样的文件夹。该程序正在寻找它。包含文件的顺序是先在当前工作目录根路径下的字体文件夹中搜索,然后在相对于当前文件所在目录的字体文件夹中搜索。也就是说,如果这个使用不当的话,程序会在根路径下按照这种方式依次查找,这也是很混乱的。因此,大家应该尽量把用到的文件写在最容易找到的位置,以方便程序的编写。执行效率。此外,还有像 echo 这样的函数可以输出多个字符串或变量。使用“.”的执行效率连接比“,”连接低。
更详细的总结如下:
1.使用单引号而不是双引号来包含字符串,这样会更快。因为 PHP 会搜索双引号包围的字符串中的变量,但单引号不会。注意:只有echo可以做到这一点,它是一个可以接受多个字符串作为参数的“函数”(译注:PHP手册中说echo是一种语言结构,而不是真正的函数,所以函数用双引号括起来) 。
2、如果类方法可以定义为,尽量定义为,其速度将提高近4倍。
3、$row['id']的速度是$row[id]的7倍。
4、echo比print更快,并且使用echo的多个参数(译注:指用逗号代替句点)而不是字符串拼接,如echo str1,str2。
5. 在执行for循环之前确定最大循环次数。不要每次循环都计算最大值。最好用它来代替。
6. 取消注册未使用的变量,尤其是大型数组,以释放内存。
7.尽量避免使用__get、__set。
8. () 很贵。
9、文件尽量使用绝对路径,因为这样可以避免PHP搜索文件的速度变慢,解析操作系统路径所需的时间也会更少。
10. 如果你想知道脚本开始执行的时刻(注解:服务器收到客户端请求),使用
11、函数代替正则表达式完成同样的功能。
12、函数比函数快,但strtr函数的效率是函数的四倍。
13、如果字符串替换函数可以接受数组或者字符作为参数,并且参数长度也不太长,那么可以考虑多写一段替换代码,让传递的每个参数都是一个字符,而不是只写一行接受数组的代码。作为查询和替换的参数。
14、使用选择性分支语句(翻译注释:case)比使用多个if、else、if语句要好。
15、用@来屏蔽错误信息是非常低效的,极其低效的。
16、开启的模块可以提高网页的浏览速度。
17、数据库连接使用完毕后应关闭,不要使用长连接。
18. 错误消息的代价是昂贵的。
19. 增加方法中的局部变量是最快的。几乎与在函数中调用局部变量一样快。
20. 递增全局变量比递增局部变量慢 2 倍。
21. 增加一个对象属性(例如:$this->prop++)比增加一个局部变量慢3倍。
22. 递增未定义的局部变量比递增预定义的局部变量慢 9 到 10 倍。
23、只定义局部变量而不在函数中调用它也会降低速度(与递增局部变量的程度相同)。 PHP 可能会检查全局变量是否存在。
24. 方法调用似乎与类中定义的方法数量无关,因为我添加了 10 个方法(在测试方法之前和之后),并且性能没有变化。
25. 派生类中的方法比基类中定义的相同方法运行得更快。
26. 调用一个带有一个参数的空函数所花费的时间相当于局部变量递增 7 到 8 倍。类似的方法调用需要接近 15 次局部变量增量操作。
27. 解析 PHP 脚本的时间比解析静态 HTML 页面慢 2 到 10 倍。尝试使用更多的静态 HTML 页面和更少的脚本。
28.除非脚本可以缓存,否则每次调用都会重新编译。引入 PHP 缓存机制通常可以将性能提高 25% 到 100%,以消除编译开销。
29.尝试缓存并使用它。它是一个高性能内存对象缓存系统,可用于加速动态 Web 应用程序并减少数据库负载。 OP 代码的缓存很有用,这样就不必为每个请求重新编译脚本。
30、当操作一个字符串,需要检查其长度是否满足一定要求时,自然会用到()函数。这个函数执行得相当快,因为它不做任何计算,只是返回存储在 zval 结构(C 的内置数据结构,用于存储 PHP 变量)中的已知字符串长度。不过,由于()是一个函数,所以会有些慢,因为函数调用会经过很多步骤,比如小写字母(译注:指小写函数名,PHP不区分函数名大小写) 、哈希搜索等。与被调用的函数一起执行。在某些情况下,您可以使用 isset() 技巧来加快代码的执行速度。
(如下例)
1if (strlen($foo) < 5) { echo “Foo is too short”$$ }
2
3(与下面的技巧做比较)
4
5if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用 isset() 恰好比 () 更快,因为与后者不同,isset() 作为一种语言构造,意味着它的执行不需要函数查找和字母小写。也就是说,您实际上并没有在顶级代码检查字符串长度上花费太多开销。
31. 当执行变量i的递增或递减时,i会比i慢。这种差异是 PHP 特有的,不适用于其他语言,因此请不要修改您的 C 或 Java 代码并期望它立即更快,这是行不通的。 i 更快,因为它只需要 3 条指令 (),而 i 需要 4 条指令。后递增实际上创建了一个随后递增的临时变量。前缀增量直接在原始值上增加。这是一种优化形式,由 Zend 的 PHP 优化器完成。记住这种优化是个好主意,因为并非所有命令优化器都会执行相同的优化,并且有大量 服务提供商 (ISP) 和服务器没有安装命令优化器。
32. 并不是一切都必须面向对象(OOP),面向对象往往非常昂贵,而且每个方法和对象调用都会消耗大量内存。
33. 没有必要使用类来实现所有数据结构。数组也很有用。
34、方法不要细分太多。仔细想想你真正打算重用哪些代码?
35. 当需要时,您始终可以将代码分解为方法。
36.尝试使用大量PHP内置函数。
37、如果代码中有大量耗时的函数,可以考虑将其实现为C扩展。
38.()你的代码。检查器会告诉您代码的哪些部分花费了多少时间。调试器包括检查例程,评估检查可以揭示整个代码中的瓶颈。
39. 可以作为模块来即时压缩您的数据,减少80%的数据传输量。
40.如果你可以使用替代方法,例如file、fopen、feof、fgets等,请尝试使用它们,因为它们效率更高!但打开URL文件时要注意PHP版本。
41、执行尽可能少的文件操作,尽管PHP的文件操作效率并不低。
42、优化SQL语句,执行尽可能少的操作(上面批评了我)。
43. 尽可能使用PHP内部函数(但是为了找到PHP中不存在的函数,我浪费了本来可以通过编写自定义函数来编写的时间。这是经验问题!)。
44.不要在循环内声明变量,尤其是大变量:对象(这似乎不仅仅是PHP的问题?)。
45. 尽量不要在多维数组中循环和嵌套赋值。
46.当可以使用PHP内部字符串操作函数时,不要使用正则表达式。
47. 效率更高。尝试替换 while 和 for 循环。
48. 使用单引号而不是双引号来引用字符串。
49.用i+=1代替i=i+1。符合c/c++的习惯,效率高。
50. 变量在使用时应该被 unset()ed。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。