• PHP高效率写法


    1.尽量静态化:

    如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。 
    当然了,这个测试方法需要在十万级以上次执行,效果才明显。 
    其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。 
    任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快。 
    静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而是实例化可以销毁。

    2.echo的效率高于print,因为echo没有返回值,print返回一个整型;

    测试: 
    Echo 
    0.000929 - 0.001255 s (平均 0.001092 seconds) 
    Print 
    0.000980 - 0.001396 seconds (平均 0.001188 seconds) 
    相差8%左右,总体上echo是比较快的。 
    注意,echo大字符串的时候,如果没有做调整就严重影响性能。使用打开apached的mod_deflate进行压缩或者打开ob_start先将内容放进缓冲区。

    3.在循环之前设置循环的最大次数,而非在在循环中;

    1. 傻子都明白的道理。

    4.销毁变量去释放内存,特别是大的数组;

    数组和对象在php特别占内存的,这个由于php的底层的zend引擎引起的, 
    一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。 
    特别是在PHP作为后台服务器的系统中,经常会出现内存耗费太大的问题。

    5.避免使用像__get, __set, __autoload等魔术方法;

    对于__开头的函数就命名为魔术函数,此类函数都在特定的条件下初访的。总得来说,有下面几个魔术函数 
    __construct(),__destruct(),__get(),__set(),__unset(),__call(),__callStatic(),__sleep(),__wakeup(),__toString(),__set_state(),__clone(),__autoload()

    其实,如果__autoload不能高效的将类名与实际的磁盘文件(注意,这里指实际的磁盘文件,而不仅仅是文件名)对应起来,系统将不得不做大量的文 件是 否存在(需要在每个include path中包含的路径中去寻找)的判断,而判断文件是否存在需要做磁盘I/O操作,众所周知磁盘I/O操作的效率很低,因此这才是使得autoload机 制效率降低的原因。

    因此,我们在系统设计时,需要定义一套清晰的将类名与实际磁盘文件映射的机制。这个规则越简单越明确,autoload机制的效率就越高。 
    结论:autoload机制并不是天然的效率低下,只有滥用autoload,设计不好的自动装载函数才会导致其效率的降低.

    所以说尽量避免使用__autoload魔术方法,有待商榷。

    6.requiere_once()比较耗资源;

    这是因为requiere_once需要判断该文件是否被引用过),所以能不用尽量不用。常用require/include方法避免。

    7.在includes和requires中使用绝对路径。

    如果包含相对路径,PHP会在include_path里面遍历查找文件。 
    用绝对路径就会避免此类问题,因此解析操作系统路径所需的时间会更少。

    8.如果你需要得到脚本执行时的时间,$_SERVER['REQUSET_TIME']优于time();

    可以想象。一个是现成就可以直接用,一个还需要函数得出的结果。

    9.能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式; 因为其效率高于正则;

    没得说,正则最耗性能。 
    有没有你漏掉的好用的函数?例如:strpbrk()strncasecmp()strpos()/strrpos()/stripos()/strripos()加速 strtr如果需要转换的全是单个字符的时候, 
    用字符串而不是数组来做 strtr: 

  • 相关阅读:
    消息队列 ActiveMQ
    Redis
    SQL 怎么用EXISTS替代IN
    SQL优化
    为什么要重写hashCode()和equals()方法
    Redis的介绍和面试可能问到的问题
    建立私有CA和颁发证书
    修复grub2
    Centos 7 进入救援模式
    Centos 服务的常用命令
  • 原文地址:https://www.cnblogs.com/leedaily/p/8250074.html
Copyright © 2020-2023  润新知