• PHP性能优化


    PHP使用过程中,一些优化细节总结:

    1.用单引号代替双引号来包含字符串,这样会快一些

    2.如果能将类定义成静态(static),就尽量定义成静态,它的速度会提升将近4倍

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

    4.echo比print快,并且使用echo的多重参数代替字符串拼接,比如echo $str,$str2

    5.在使用for循环前确定最大循环数,不要每循环一次都计算最大值,最好用foreach代替

    6.注销那些不用的变量尤其是大数组,以便释放内存

    7.尽量避免__get,__set,__autoload

    8.include_once比include更加耗时

    9.include文件时尽量使用绝对路径,因为它避免了 PHP 去 include_path 里查找文件的速度,解析操作系统路径所需的时间会更少。

    10.如果你想知道脚本开始执行的时刻,使用 $_SERVER['REQUEST_TIME'] 要好于 time()

    11.函数代替正则表达式完成相同功能

    12.str_replace函数比preg_replace函数快,但strstr函数的效率是str_replace的4倍

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

    14.使用选择分支语句(switch  case)好于使用多个if elseif 语句

    15.用@屏蔽错误消息的做法非常低效

    16.打开apache的mod_deflaet模块,可以提升网页的浏览速度

    17.数据库连接当使用完毕时应关掉,不要使用长连接

    18.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

    19.递增一个全局变量比递增一个局部变量慢2倍

    20.派生类中的方法运行起来要快于在基类中定义的同样的方法。

    21.Apache 解析一个 PHP 脚本的时间要比解析一个静态 HTML 页面慢 2 至 10 倍。尽量 多用静态 HTML 页面,少用脚本。

    22.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套 PHP 缓存机制通常 可以提升 25%至 100%的性能,以免除编译开销。

    23.尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统, 可用来加速动态 Web 应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使 得脚本不必为每个请求做重新编译。

    24.当执行变量$i递增或递减时,$i++比++$i慢一些

    25.并不是事比面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存

    26.并非要用类实现所有的数据结构,数组也很有用

    27.不要把方法细分得过多,想想你真正打算重用的是哪些代码

    28.尽量采用PHP内置函数

    29.评估检验(profile)你的代码。 检验器会告诉你, 代码的哪些部分消耗了多少时间。 Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

    30.mod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。

    31.在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情况下,尽量 用 file_get_contents,因为他的效率高得多

    32.优化 Select SQL 语句,在可能的情况下尽量少的进行 Insert、Update 操作

    33.循环内部不要申明变量,尤其是大变量:对象

    34.多维数组尽量不要循环嵌套赋值

    35.在可以使用PHP内置字符串操作函数的情况下,不要使用正则表达式

    36.foreach效率更高,尽量使用foreach代替while和for循环

    37.对于global变量,应该用完就unset()掉

    38.不要在循环中,嵌套使用for循环

    39.全等号===比相等号==要快

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

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

    42.使用isset()代替strlen()。如:

    if (strlen($foo) < 5) { echo "Foo is too short";}// 使用isset()

    if (!isset($foo{5})) { echo "Foo is too short";}

    43.在分割字符串时,使用split()比explode()要快

    44.避免使用魔术方法。对于__开头的函数就命名为魔术函数,它们都在特定的条件下触发。

    45.别再循环里用函数。例如

    for($x=0; $x < count($array); $x++) {

    }

    46.在简单的运算中,使用三元运算符(?:)更加简洁高效

    47.屏蔽敏感信息。使用error_reporting()函数来预防潜在的敏感信息显示给用户

    48.不要使用开始标志的缩写形式,你正在使用这样的符号吗<?,应该用完整的<?php开始标签。

    49.如果文件内容是纯PHP代码,最好在文件末尾删除PHP结束标记?>

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

    51.类的性能和其方法数量没有关系

    52.引用传递参数。通过参数地址引用的方式,实现函数多个返回值,这比按值传递效率高

    53.提前声明局部变量,谨慎声明全局变量

    54.不要随便复制变量

    55.一定要对变量进行初始化(声明)

    56.用字符串而不是数组作为参数。如果一个函数既能接受数组,又能接受简单字符做为参数,那么尽量用字符作为参数。

    57.数组元素加引号。$row['id']比$row[id]速度快7倍。

    以下是架构方面的总结:

    58.在php.ini中开启gzip压缩:zlib.output_compression = Onzlib.output_compression_level = (level)

    59.静态化页面。Apache/Nginx解析一个PHP脚本的时间,要比解析一个静态HTML页面慢2至10倍。

    60.将PHP升级到最新版

    61.利用PHP的扩展

    62.PHP缓存。

    63.使用NoSQL缓存:Memchached或者redis都可以



  • 相关阅读:
    arcpy脚本使用多接图表图斑对对应多幅影像进行裁边处理
    小辉轶事
    一些常ArcGIS常用简单算法 C#
    Wowza 4.5 修改 manager 端口号
    win7x64 串口程序无法运行,提示:component 'MSCOMM32.OCX' or one of its dependencies not correctlu registered。。。
    win7不正常开关机,系统恢复选项
    远程桌面+程序自启动
    Beyond Compare4 激活
    edusoho 支持同一账号多人同时登录
    windows 2008 gpt
  • 原文地址:https://www.cnblogs.com/jackzhuo/p/12937366.html
Copyright © 2020-2023  润新知